在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'.
有没有其他或更惯用的方式来处理这种情况?
答案 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); }