Generics 传递泛型类型和使用类型属性
我对TypeScript非常陌生,尽管我有红色文档,但我无法用泛型实现我想要的 我想这样做:Generics 传递泛型类型和使用类型属性,generics,typescript,Generics,Typescript,我对TypeScript非常陌生,尽管我有红色文档,但我无法用泛型实现我想要的 我想这样做: declare interface ObjectInterface { someKey: string } const model: SomeInterface = createModel<ObjectInterface>(someArrayOfObjects); TypeScript向我抛出了一个错误:错误TS2339:类型“T”上不存在属性“someKey”。 这是我不明白
declare interface ObjectInterface {
someKey: string
}
const model: SomeInterface = createModel<ObjectInterface>(someArrayOfObjects);
TypeScript向我抛出了一个错误:错误TS2339:类型“T”上不存在属性“someKey”。
这是我不明白的部分。如果ObjectInterface
具有someKey
并作为泛型类型传递给createModel
,那么为什么obj
不将其“视”为属性
如果谷歌有答案,那么请给我一个提示,我应该搜索哪些键?;) 目前,在
createModel
函数中,T
可以是任何东西(any
)。因此,不能保证编译时类型为T
的变量实际上包含属性someKey
。例如,考虑有人用<代码> > CytMeMod(…)>代码> >代码>某个其他接口< /代码>没有<代码>某个键<代码>属性,或者甚至使用<代码> CREATEMMODEL(…) .<
通过对该类型参数制定约束,可以强制执行用于T
的任何类型参数必须是ObjectInterface
的子类型:
createModel<T extends ObjectInterface>(someArray: T[]): SomeInterface {
// ...
}
createModel(someArray:T[]):SomeInterface{
// ...
}
查看有关泛型的更多信息。您需要在
T
上添加一个约束:createModel(someArray:T[]):SomeInterface{…}
谢谢,我在文档中也发现了这一点,但不知何故,我认为这只适用于未在接口上特别设置的内容,如.length
。我在想,如果我能通过ObjectInterface,TS就会知道有那个钥匙。非常感谢。在我的问题下,Lee写了同样的建议,所以我将复制粘贴我在那里写的内容:我在文档中也发现了这一点,但不知何故,我认为这只适用于界面上未特别设置的内容,如.length
。我在想,如果我通过ObjectInterface,TS就会知道有那个键。
createModel<T extends ObjectInterface>(someArray: T[]): SomeInterface {
// ...
}