我具有以下类型定义:
export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
我这样使用:
let props: Array<{ p: PropertyNames;
field: keyof Omit<UnitOffersComponent, "offerTypes"> }> = [...];
我想在字段属性只能包含数组类型的属性名称的情况下定义类型?
答案 0 :(得分:1)
您可以使用映射类型和条件类型来根据字段类型过滤类型的键:
type FieldsOfType<T, TFieldType> = { [P in keyof T] : T[P] extends TFieldType ? P : never }[keyof T];
//Usage
interface UnitOffersComponent {
n: number;
numArray: number[];
strArray: string[];
}
let props: Array<FieldsOfType<UnitOffersComponent, any[]>>; // is of type ("numArray" | "strArray")[]