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

时间:2016-07-02 12:13:18

标签: generics typescript

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

var joexnElement = document.getElementsByTagName('joexn')[0];

这不编译:

  

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

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

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

有没有其他或更惯用的方式来处理这种情况?

1 个答案:

答案 0 :(得分:11)

有意义的是,第一个样本无法编译。 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); }