logoProsperBao

Required Keys

2022-05-05 03

题目来源(type-challenges)

问题

实现高级util类型RequiredKeys<T>,该类型将所有必需的键都选择为一个并集。

例如

type case1 = RequiredKeys<{ a: number; b?: string }> // 'a'
type case2 = RequiredKeys<{ a: undefined; b?: undefined }> // 'a'
type case3 = RequiredKeys<{ a: undefined; b?: undefined; c: string; d: null }> // 'a' | 'c' | 'd'
type case4 = RequiredKeys<{}> // never

解答

type RequiredKeys<T> = keyof {
  [K in keyof T as T[K] extends Required<T>[K] ? K : never]: T[K]
}

拆分

  1. Get Required 类似
  2. 只需要对结果对象多加一个 keyof 获取