鉴于我们有一个通用的可索引类型,我该如何仅检索其值的类型以缩小到仅某些键?
// 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'
答案 0 :(得分:1)
当然,您可以使用conditional和mapped类型仅提取对象类型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
希望有帮助。祝你好运!