Typescript 通过键访问时返回类型化对象属性
很难解释,下面是一个例子:Typescript 通过键访问时返回类型化对象属性,typescript,Typescript,很难解释,下面是一个例子: interface O { n: number; s: string; } const f = (key: keyof O, o: O) => o[key]; const value = f('n', { n: 1, s: '' }); // value type is (string | number) 在这种情况下,我希望value类型为number,因为键n指向number属性您可以通过使用f函数的通用语法来实现这一点。对于一个匿名函数,您可以
interface O {
n: number;
s: string;
}
const f = (key: keyof O, o: O) => o[key];
const value = f('n', { n: 1, s: '' }); // value type is (string | number)
在这种情况下,我希望
value
类型为number
,因为键n
指向number
属性您可以通过使用f
函数的通用语法来实现这一点。对于一个匿名函数,您可以执行以下操作:
const f = <O, K extends keyof O>(key: K, o: O) => o[key];
伟大的!所以这个解决方案不依赖于接口本身,对吗?谢谢,这很有效!而且
O
不需要是泛型。你可以这样做:f=(key:K,o:o)=>o[key]
。但是我不明白为什么它能工作,而这个不能:f=(key:keyof,O:O)=>O[key]
const value = f('n', { n: 1, s: '' }); // value type is: number
const other = f('s', { n: 1, s: '' }); // other type is: string