我具有以下功能:
interface ExtraModels extends Model {
unknown: string
}
const write = async (data: ExtraModels[]) => {
console.log(data[0].unknown)
}
正在工作。现在我要更改:
const write = async <T = ExtraModels>(data: T[]) => {
console.log(data[0].unknown)
}
但是它不会与错误一起编译:
类型'T'不存在属性“未知”。ts(2339)
我不明白我在做什么错。根据我的研究,这是有效的。
答案 0 :(得分:3)
这是有效的,但未达到您的期望。 = ExtraModels
表示如果无法根据参数推断T
,则ExtraModels
将是T
。但是T
可以是任何类型,包括不扩展ExtraModels
的类型(这就是为什么编译器不允许您访问ExtraModels
的属性)
您想将T
约束为扩展ExtraModels
的类型。其语法为T extends ExtraModels
。由于T
必须扩展ExtraModels
,因此打字稿将使您可以访问ExtraModels
的属性。
const write = async <T extends ExtraModels>(data: T[]) => {
console.log(data[0].unknown)
}