有一种实用程序类型NonNullable
,它将从联合类型中删除undefined
和null
值。但是我想知道是否有一种方法可以从类型中删除可选字段。
基本上,如果我有这样的类型:
type MyType = {
thingOne: number,
thingTwo?: number
};
我希望只能在必填字段中创建类型
type MyRequireds = NonOptional<MyType>;
// which is a type only containing "thingOne"
是否有一些实用程序类可以满足组成的“ NonOptional”实用程序类?
答案 0 :(得分:1)
一个棘手的解决方案:
type RequiredKeys<T> = {
[K in keyof T]: ({} extends { [P in K]: T[K] } ? never : K)
}[keyof T];
type NonOptional<T> = Pick<T, RequiredKeys<T>>;
type MyType = {
thingOne: number,
thingTwo?: number
};
type MyRequireds = NonOptional<MyType>;
诀窍是{}
扩展了{thingTwo?: number}
但没有扩展{thingOne: number}
。我最初找到了此解决方案here。
答案 1 :(得分:0)
您可以使用波纹管将其压缩为一种类型。
type OmitOptional<T> = {
[P in keyof Required<T> as Pick<T, P> extends Required<Pick<T, P>> ? P : never]: T[P]
}