Typescript 泛型类型T上不存在属性

Typescript 泛型类型T上不存在属性,typescript,generics,typescript-typings,Typescript,Generics,Typescript Typings,我不明白下面的错误 这是一个最小的可重复的例子 type Left={ 元素:0 } 类型权限={ 要素:1 } 接口类型{ “左”:左 “对”:对 } 函数foo(obj:T){ 控制台日志(对象元素) // ^^^^^^^ //类型“T”上不存在属性“element”。 } 当然,我仍然可以复制粘贴我的函数 函数傻瓜eft(对象:左){ 控制台日志(对象元素) } 功能右(对象:右){ 控制台日志(对象元素) } 它工作得很好,但看起来不干净。。。如何避免复制粘贴我的函数 我不能使用并集

我不明白下面的错误

这是一个最小的可重复的例子

type Left={
元素:0
}
类型权限={
要素:1
}
接口类型{
“左”:左
“对”:对
}
函数foo(obj:T){
控制台日志(对象元素)
// ^^^^^^^
//类型“T”上不存在属性“element”。
}
当然,我仍然可以复制粘贴我的函数

函数傻瓜eft(对象:左){
控制台日志(对象元素)
}
功能右(对象:右){
控制台日志(对象元素)
}
它工作得很好,但看起来不干净。。。如何避免复制粘贴我的函数

我不能使用并集,在实际代码中,有几个参数取决于
键入

keyof Typings
这意味着字符串
“left”|“right”
,它们是
打字的键。您似乎想要属性的类型,而不是
Left | Right

为此,您希望
T
成为其所有属性的联合类型。您可以通过使用类型自身的所有键对其进行索引来实现这一点

function foo<T extends Typings[keyof Typings]>(obj: T) {
    console.log(obj.element) // obj is: Left | Right
}
函数foo(obj:T){ console.log(obj.element)//obj为:左|右 }

这意味着字符串
“left”|“right”
,它们是
打字的键。您似乎想要属性的类型,而不是
Left | Right

为此,您希望
T
成为其所有属性的联合类型。您可以通过使用类型自身的所有键对其进行索引来实现这一点

function foo<T extends Typings[keyof Typings]>(obj: T) {
    console.log(obj.element) // obj is: Left | Right
}
函数foo(obj:T){ console.log(obj.element)//obj为:左|右 }