我不明白以下的错误
以下是一个可重复性最小的示例
type Left = {
element: 0
}
type Right = {
element: 1
}
interface Typings {
"left": Left
"right": Right
}
function foo<T extends keyof Typings>(obj: T) {
console.log(obj.element)
// ^^^^^^^
// Property 'element' does not exist on type 'T'.
}
当然我仍然可以复制粘贴我的功能
function fooLeft(obj: Left) {
console.log(obj.element)
}
function fooRight(obj: Right) {
console.log(obj.element)
}
它工作得很好,但看起来不干净。。。如何避免复制粘贴我的函数?
我不能使用并集,在实际代码中,几个参数取决于Typings
。
keyof Typings
这意味着字符串"left" | "right"
是Typings
的键。您似乎想要属性的类型,而不是Left | Right
。
为此,您希望T
是其所有属性的并集类型。您可以通过使用该类型自己的所有键对其进行索引来实现这一点。
function foo<T extends Typings[keyof Typings]>(obj: T) {
console.log(obj.element) // obj is: Left | Right
}
游乐场