是否可以使用此签名创建类型:
type Optional<T> = ...
...这可以转换:
type A = {
a: number
b: string[]
}
…在里面:
type Optional_A = {
a?: number | null
b?: (string | null | undefined)[] | null
}
圣的转换a
没有问题:
type BadOptional<T> = { [K in T]?: K | null }
阵列的主要问题。如果 TypeScript 支持这样的东西:
type ImpossibleOptional<T> = {
[K in T]?: (K extends U[]
? (U | null | undefined)[]
: K) | null
}
......解决方案会自行找到,但没有。
操场
事实证明:
虽然,一般来说,明确规定
undefined
值可能是值得的——如果有一天打字稿改变主意并停止自行添加会怎样。虽然,可能,这对他们来说太颠覆了,但他们正在逐渐向那里移动。也许会添加另一个严格的标志。事实证明,这样的标志已经存在:
exactOptionalPropertyTypes
.