是否存在或有办法使用这种东西:
type X<Obj, FieldType> = ???;
interface A {
a: number;
b: number;
c: string;
d: Date;
}
type Nums = X<A, number>; // == 'a' | 'b'
type Strings = X<A, string>; // == 'c'
type Dates = X<A, Date>; // == 'd'
其中X
是我要寻找的通用类型(keyof Obj
的子集,在这种情况下为keyof A
)。
答案 0 :(得分:1)
您可以使用条件类型来过滤所需类型的属性:
type X<Obj, FieldType> = {
[P in keyof Obj]-?: Obj[P] extends FieldType ? P : never
}[keyof Obj];
interface A {
a: number;
b: number;
c: string;
d: Date;
}
type Nums = X<A, number>; // == 'a' | 'b'
type Strings = X<A, string>; // == 'c'
type Dates = X<A, Date>; // == 'd'
您可以查看我对此here的解释