将类型过滤为仅其不可为 null 的属性

sta*_*eth 3 typescript

给定这种类型

type HasOptionals = {
   name: string
   surname?: string
}
Run Code Online (Sandbox Code Playgroud)

是否可以生成一个排除任何可选属性的类型?

type example = OnlyRequired<HasOptionals> // { name: string }
Run Code Online (Sandbox Code Playgroud)

jon*_*rpe 5

您可以使用带有键重新映射的映射类型

type OnlyRequired<T> = {
    [K in keyof T as undefined extends T[K] ? never : K]: T[K]
}
Run Code Online (Sandbox Code Playgroud)

现在OnlyRequired<HasOptionals>确实是{ name: string; }