Generics 传递泛型类型和使用类型属性

Generics 传递泛型类型和使用类型属性,generics,typescript,Generics,Typescript,我对TypeScript非常陌生,尽管我有红色文档,但我无法用泛型实现我想要的 我想这样做: declare interface ObjectInterface { someKey: string } const model: SomeInterface = createModel<ObjectInterface>(someArrayOfObjects); TypeScript向我抛出了一个错误:错误TS2339:类型“T”上不存在属性“someKey”。 这是我不明白

我对TypeScript非常陌生,尽管我有红色文档,但我无法用泛型实现我想要的

我想这样做:

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 {
    // ...
}