通过键访问时返回类型化的对象属性

时间:2018-09-04 16:12:38

标签: typescript

很难解释,所以这里是一个例子:

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属性

1 个答案:

答案 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