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];
};