建议在显式部分类型上使用映射类型,请参见 https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types
即代替
interface PersonPartial {
name?: string;
age?: number;
}
我们将使用
interface Person {
name: string;
age: number;
}
type Partial<T> = {
[P in keyof T]?: T[P];
}
type PersonPartial = Partial<Person>;
是否可以映射到另一个方向,例如
type NotPartial<T> = {
[P in keyof T]!: T[P];
}
type Person = NotPartial<PersonPartial>;
因为我有一个生成的可创建部分接口的生成器,该接口由于使用鸭子输入而中断了类型检查。
答案 0 :(得分:3)
您可以使用-?
语法从同态映射类型中删除?
(但请继续阅读):
interface Person {
name?: string;
age?: number;
}
type Mandatory<T> = {
[P in keyof T]-?: T[P];
}
type PersonMandatory = Mandatory<Person>;
Example on the playground。描述here。
但是,您不必这样做,因为TypeScript已经拥有它:Required<T>
。 Required<T>
...
...从
?
的所有属性中剥离T
修饰符,从而使所有属性成为必需。
所以:
interface Person {
name?: string;
age?: number;
}
type RequiredPerson = Required<Person>;
答案 1 :(得分:0)
如果您选中 https://www.typescriptlang.org/docs/handbook/utility-types.html,您可以看到 Typescript 提供了很多实用程序类型。所以请注意该实用程序尚未存在。您会发现 Required
最适合您的场景。
如果你想了解更多,我写了一篇关于映射类型的文章here