TypeScript通过其值类型缩小可索引类型的键

时间:2019-03-20 00:43:58

标签: typescript

鉴于我们有一个通用的可索引类型,我该如何仅检索其值的类型以缩小到仅某些键?

// imagine check is a function and its second argument only allows the property `a` as it's string and raise an error if 'b' is passed
const test2 = check({ a: 'string', b: 22 }, 'b'); // error only 'a' is allowed
const test2 = check({ a: 'str', b: 'str2' }, 'b'); // ok returns 'str2'

1 个答案:

答案 0 :(得分:1)

当然,您可以使用conditionalmapped类型仅提取对象类型T的键,其值与值类型V匹配的键来做到这一点:< / p>

type KeysMatching<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];
declare function check<T>(obj: T, k: KeysMatching<T, string>): string;

const test1 = check({ a: 'string', b: 22 }, 'b'); // error 
const test2 = check({ a: 'str', b: 'str2' }, 'b'); // ok 

希望有帮助。祝你好运!