gpt4 book ai didi

generics - TypeScript 报告泛型函数中不存在的属性

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:31 25 4
gpt4 key购买 nike

考虑 TypeScript 中的以下通用函数:

interface Foo { id: string; }
const foo = <Foo>{id: 'bar'};
function baz<T>(x: T) { console.log(x.id); }
baz(foo);

这不编译:

test.ts(6,17): error TS2339: Property 'id' does not exist on type 'T'.

在我看来,TypeScript 应该能够处理这种情况。如果不能,那么我必须做这样的事情:

interface IHasId { id: string; }
interface Foo extends IHasId { }
const foo = <Foo>{id: 'bar'};
function baz<T>(x: IHasId) { console.log(x.id); }
baz<Foo>(foo);

是否有任何替代或更惯用的方法来处理这种情况?

最佳答案

这是有道理的,第一个示例无法编译。 Typescript 就是添加类型检查。如果你想禁用它,你可以使用 any,但为什么在这种情况下使用泛型?

如果你想定义泛型的约束,你可以这样做:

function baz<T extends IHasId>(x: T) { console.log(x.id); }

顺便说一句,约束可以内联定义:

function baz<T extends { id: string; }>(x: T) { console.log(x.id); }

关于generics - TypeScript 报告泛型函数中不存在的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com