我有一个在输入数组中使用的类型。我需要输入类型。默认从Input的值推断。key,所以它扩展了T[key]的值。我用的是typescript 5。0.4
type Input<T, T2 extends key of T> = {
key: T2
default: T[key] // type is inferred from value of key
}
例如,如果T = { foo: string, bar: boolean }
和key = 'bar'
,默认值必须是布尔类型。我的需求:
var biz: Input<{ foo: string, bar: boolean }>[]
biz = [{
key: "foo",
default: "example"
},{
key: "bar",
default: true // No eror
},{
key: "bar",
default: "not boolean" // Errors
}]
由于biz是一个数组,因此无法手动使用类型参数:
var biz: Input<{ foo: string, bar: boolean }, "bar">[] // Added "bar" as key
biz = [{
key: "foo",
default: "example" // Unwanted error. Type is based on T['bar'] not T['foo']
},{
key: "bar",
default: true // No eror
},{
key: "bar",
default: "not boolean" // Errors
}]
1条答案
按热度按时间cbwuti441#
考虑以下示例:
Playground
您需要遍历Shape的键并创建新的Map类型,其中
key
是键的名称,default
是类型。看这个:然后需要将其 Package 到
Values
中,因为您对对象值感兴趣。只需尝试删除
Values
Package 器并检查您拥有的内容