Skip to content

可选类型的键

题目

实现高级工具类型OptionalKeys<T>,该类型将 T 中所有可选属性的键合并为一个联合类型。

解答

可以结合获得可选属性

ts
type GetOptional<T> = {
  [P in keyof T as T[P] extends Required<T>[P] ? never : P]: T[P];
};

type OptionalKeys<T> = keyof GetOptional<T>;

或者使用其他方式:

ts
type OptionalKeys<T> = {
  [P in keyof T]-?: {} extends Pick<T, P> ? P : never;
}[keyof T];

Released under the MIT License.