我想要一种类型,它将产生另一种类型的键,其属性与给定类型匹配:
type KeyOfType<T, U extends T[keyof T]> = keyof T; // ?? type such that T[KeyOfType<T, U>] == U
Run Code Online (Sandbox Code Playgroud)
例如,考虑接口 I:
interface I {
a: string;
b: number|string;
c: string|number;
d: string;
}
Run Code Online (Sandbox Code Playgroud)
我想要以下等价物:
type T1 = KeyOfType<I, string>; // 'a'|'d'
type T2 = KeyOfType<I, string|number>; // 'b'|'c'
type T3 = KeyOfType<I, number>; // never
Run Code Online (Sandbox Code Playgroud)
我接近以下内容:
type KeyOfTypeTest<T, U> = NonNullable<{
[K in keyof T]: U extends T[K] ? T[K] extends U ? K : never : never;
}[keyof T]>; …Run Code Online (Sandbox Code Playgroud)