感谢Nit在这个答案中的回复,我有了一个通用类型NullValuesToOptional
,它可以生成每个可为空值变为可选值的类型:
type NullValuesToOptional<T> = Omit<T, NullableKeys<T>> & Partial<Pick<T, NullableKeys<T>>>;
type NullableKeys<T> = NonNullable<({
[K in keyof T]: T[K] extends NonNull<T[K]> ? never : K
})[keyof T]>;
type NonNull<T> = T extends null ? never : T;
它有效:
interface A {
a: string
b: string | null
}
type B = NullValuesToOptional<A>; // { a: string, b?: string | null }
现在我想将NullValuesToOptional
递归应用:
interface C {
c: string
d: A | null
e: A[]
}
type D = NullValuesToOptional<C>;
// { c: string, d?: NullValuesToOptional<A> | null, e: NullValuesToOptional<A>[] }
这是可能的吗?