一个例子比语言更能说明我的问题:
interface X {
a: number,
b: string
}
interface KeyValue<T> {
key: keyof T,
value: T[this['key']]
}
const keyValue: KeyValue<X> = {
key: 'a',
value: 'Error! this should be a number'
};
我希望value
的类型基于key
的值,我的意思是,如果key
是a,那么我需要value
的类型与X[a]
的类型相同,即number
,但目前,value
的类型是string | number
,它是X
中所有值类型的联合类型。
我能用当前的 typescript 功能实现这一点吗?
1条答案
按热度按时间8mmmxcuj1#
你不能直接这么做你需要一个额外的类型参数
为了避免两次键入属性名称,您可以使用函数来帮助创建。您需要一个fi函数来返回函数,因为Typescript还不允许部分类型参数推断