我需要从type X = { a: string, b?: string, c: number }
之类的接口中提取通用密钥'a' | 'c'
我想出了
type RequiredFields<T> =
keyof T extends infer R
? R extends keyof T
? undefined extends T[R]
? never
: R
: never
: never
我想知道是否有更简单/更合法的方法来实现这一目标
答案 0 :(得分:1)
另一种可能的方式是:
type RequiredFields<T extends object> = Exclude<{
[K in keyof T]: T extends Record<K, T[K]>
? K
: never
}[keyof T], undefined>
答案 1 :(得分:0)
您的解决方案一点也不差。那就是我正在使用的:
type RequiredPropertyOf<T> = Exclude<{
[K in keyof T]:
Extract<T[K], undefined> extends never
? K
: never
}[keyof T], undefined>