Skip to content

必需的键

题目

实现高级工具类型 RequiredKeys<T>,该类型返回 T 中所有必需属性的键组成的一个联合类型。

例如

ts
type Result = RequiredKeys<{ foo: number; bar?: string }>;
// expected to be “foo”

解答

可以结合获得必需的属性

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

type RequiredKeys<T> = keyof GetRequired<T>;

或者使用其他方式:

ts
type RequiredKeys<T> = keyof {
  [K in keyof T as {} extends Pick<T, K> ? never : K]: T[K];
};

Released under the MIT License.