如何在TypeScript中收窄keyof对应函数返回值为具体键值类型?
TypeScript函数返回值类型收窄问题
原函数定义如下:
const foo = <T extends object>( option: T, key: keyof T, ) => { return option[key]; };
当前调用该函数时,返回值类型会被推断为所有键对应值的联合类型。比如下面的示例中,x和y的类型都会被推断为number | string,而非对应键的具体类型:
const option = {a: 1, b: 'c'} const x = foo(option,'a') const y = foo(option,'b')
要让返回值类型收窄为对应键的具体类型,只需给函数增加一个额外的泛型参数K,将其约束为keyof T,同时把key的类型指定为K,让返回值明确对应T[K]即可。修改后的函数如下:
const foo = <T extends object, K extends keyof T>( option: T, key: K, ) => option[key];
此时再调用函数,x的类型会被正确推断为number,y的类型为string,完全符合预期。
内容的提问来源于stack exchange,提问作者A.A
相关产品推荐
相关产品推荐

