Skip to content

实现 GetOptionals ​

Code ​

ts
interface ComplexObject {
  mandatory: string;
  option1?: number;
  option2?: boolean;
}

type GetOptional<T> =

let keys: GetOptional<ComplexObject> // {option1?: number, option2: boolean}

解析 ​

ts
// 得到所有字段
type GetOptional<T> = {
  [K in keyof T]?: T[K];
};
// 剔除必填
type GetOptional<T> = {
  [K in keyof T as 条件满足 ? never : K]?: T[K];
};
type GetOptional<T> = {
  [K in keyof T as T[K] extend Required<T>[K] ? never : K]?: T[K];
};