我试图创建一个映射类型,它将所有具有特定类型(在我的情况下为数组)的属性变成可选项,但是其他属性(非数组)则保持不变。我知道可以在定义映射类型时使用可选修饰符,例如:
问题是这会导致显式的
type MyPartial<T> = {
[key in keyof T]?: T[key]
}
但我不确定语法是否允许将此与条件结合使用。我可以通过以下方法接近:
type OptionalArrays<T> = {
[key in keyof T]: T[key] extends Array<any> ? T[key] | undefined : T[key]
}
interface Example {
foo: string[];
bar: number;
};
type Example2 = OptionalArrays<Example>;
问题是这会导致显式的
undefined
,而不是隐式的,所以尽管它对这两种情况的行为符合我的期望:const value1: Example2 = {
foo: [],
bar: 3,
}
const value2: Example2 = {
foo: undefined,
bar: 3,
}
这会产生一个不必要的错误,指出缺少foo
:
const value3: Example2 = {
bar: 3,
}
在映射类型中,是否可以添加可选修饰符(?
),但只有在满足某些条件时才能添加?
undefined
代替。因此,我的读写数据库的代码将使用可选数组版本。然后,一些简单的代码将用空数组填充这些缺失的值,以便客户端代码的其余部分不需要关心。 - Nicholas Tower