TypeScript 中Partial、Required
为了更多的上下文,您可能已经编写了一个反映用户对象的接口或类型,但在某些情况下,您只想使用特定字段或更改此接口需要的字段。
这正是实用程序类型派上用场的地方,有一整套实用程序类型,我将介绍最常用的类型。
TypeScript Partial 实用程序类型
1interface User {
2 firstname: string;
3 lastname?: string;
4 age: number;
5}
我们设置了两个必填字段:
firstname
和age
。lastname
字段是可选的,因为我们添加了?
.
但是,如果我们有一个允许所有字段都是可选且有效的更新怎么办?
例如,如果我们有一个 UI,其中每个字段都将在不知道其他字段的情况下自动更新。
我们的功能可以是updateUserField
,它可以接受任何用户字段。
1
我们现在可以使用它来单独更新每个字段,而无需设置其他字段。
1pdateUserField(1, {
2 firstname: \'Chris\',
3});
4updateUserField(1, {
5 age: 32,
6});
现在这是一个有效的代码。但是,如果您删除该
Partial
实用程序,您会看到它会抛出一些关于缺少字段的 TypeScript 错误。
TypeScript Required 实用程序类型
另一方面,可能存在您希望设置该值的情况。
让我们再看看我们的用户示例。默认情况下,您可能有一个不需要 ID 的对象,因为我们还不知道它,但是一旦创建了用户,我们就可以将其设置为必需的。
1interface User {
2 id?: number;
3 firstname: string;
4 lastname: string;
5}
User
我们可以在创建用户的时候不用指定id就可以使用这个接口。
但是当我们想要更新用户时,我们要确保设置了 ID。
1const updateUser = (user: Required<User>) => {
2 db.update(user);
3};
4
5updateUser({
6 id: 12,
7 firstname: \'Chris\',
8 lastname: \'Bongers\',
9});
由于
Required
类型,User
接口中的每个字段现在都是必需的。
TypeScript 实用程序类型的一个很酷的地方是您还可以混合和匹配它们。
相关笔记