TypeScript 部分类型的工作原理
TypeScript 中的 Partial 类型是一种实用程序类型,其功能与Required相反。它将类型中的所有属性设置为可选。
让我们看看它是如何工作的。如果你对相反的问题感兴趣,可以尝试阅读我的文章,了解 TypeScript 中 Required 类型是如何工作的。
TypeScript 中的部分类型
在 TypeScript 中,我们可以使用 ? 问号将类型定义为可选类型。例如,在下面的代码中,lastName 是可选的。因此,即使 firstUser 的类型为 User,我们也可以省略 lastName,因为它不是必需的。
type User = {
firstName: string,
lastName?: string
}
let firstUser:User = {
firstName: "John"
}
有时,我们继承或使用的类型没有可选类型,但我们知道在某些情况下某些属性可能会缺失。请看下面的例子。这里,lastName 不再是可选的,但 firstUser 仍然没有可选属性:
type User = {
firstName: string,
lastName: string
}
let firstUser:User = {
firstName: "John"
}
此代码会引发错误,因为它期望 User 类型的 firstUser 应该具有一个名为的属性lastName
:
Property `lastName` is missing in type `{ firstName: string; }` but required in type `User`.
如果我们想避免这个错误,我们必须将 firstUser 的类型改为Partial<User>
。这将告诉 TypeScript 将 User 类型中的每个属性设置为可选:
type User = {
firstName: string,
lastName: string
}
let firstUser:Partial<User> = {
firstName: "John"
}
这最终与将 User 类型重新定义为:
type User = {
firstName?: string,
lastName?: string
}
唯一的区别是,我们现在可以同时使用两者——如果我们想要类型拥有一些缺失的属性,我们可以使用 Partial。如果不想要,我们可以使用普通的 User 类型:
type User = {
firstName: string,
lastName: string
}
let firstUser:Partial<User> = { firstName: "John" }
let secondUser:User = { firstName: "John", lastName: "Doe" }
与 TypeScript 中的许多其他实用类型一样,Partial 旨在与接口或定义为对象的自定义类型(例如上面的 User 类型)一起使用。因此,它不适用于变量之类的对象。
如果您喜欢本快速指南,请在此处查看更多 TypeScript 内容。
鏂囩珷鏉ユ簮锛�https://dev.to/smpnjn/how-the-typescript-partial-type-works-2klj