很难解释,所以这里是一个例子:
sqoop
在这种情况下,我希望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
属性
答案 0 :(得分:3)
您可以通过对f
函数使用通用语法来完成此操作。对于像您这样的匿名函数,您可以执行以下操作:
const f = <O, K extends keyof O>(key: K, o: O) => o[key];
这允许打字稿将key
参数推断为O
对象的特定键,在此之前,它不能仅局限于keyof O
(代表所有键的并集。
现在,您的示例将为每个键提供正确的类型:
const value = f('n', { n: 1, s: '' }); // value type is: number
const other = f('s', { n: 1, s: '' }); // other type is: string