问题 #
实现高级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]
}
拆分 #
- 和 Get Required 类似
- 只需要对结果对象多加一个
keyof
获取