使 TypeScript 中所有属性是必需的
使用 Required
实用程序类型来使类型中的所有属性都成为必需的,例如 const emp: Required<Employee> = {}
。 Required 实用程序类型构造一个新类型,其中提供的类型的所有属性都设置为 required。
interface Employee {
id?: number;
name?: string;
salary?: number;
}
const emp: Required<Employee> = {
id: 1,
name: 'Tom',
salary: 1000,
};
我们使用 Required
实用程序类型来构造一个新类型,其中提供的类型的所有属性都设置为 required。
interface Employee {
id?: number;
name?: string;
salary?: number;
}
// 👇️ type T = {
// id: number;
// name: string;
// salary: number;
// }
type T = Required<Employee>;
我们可以在 TypeScript 的 Github 存储库中看到内置的 Required
类型是如何实现的。
/**
* Make all properties in T required
*/
type Required<T> = {
[P in keyof T]-?: T[P];
};
-?:
语法称为映射修饰符,用于影响可选性。
当以减号为前缀时,映射修饰符会删除类型属性的可选性。
实用程序类型基本上采用了所提供类型的所有属性并删除了它们的可选性(使它们成为必需的)。
映射修饰符可以以两种方式影响可选性,例如 您还可以通过在 ?:
前加上加号 (+?:)
来使用它们使类型的所有属性成为可选的。
如果不添加前缀,则假定为 +
。
/**
* Make all properties in T optional
*/
type Partial<T> = {
[P in keyof T]?: T[P];
};
这是 Partial
实用程序类型的代码,它使类型中的所有属性都是可选的。
请注意,这两种类型之间的唯一区别是 Required
类型中问号前面的减号。
-?:
语法删除了可选性,而 ?:
(或 +?:
) 使类型中的所有属性都是可选的。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。