在尝试实现更复杂的数据类型时,TypeScript Records 是确保一致性的好方法。它们强制执行键值,并允许您为值创建自定义接口。TypeScriptRecord
类型在 TypeScript 2.1 中实现,形式为Record<K, T>
. 让我们来看看它是如何工作的。
实用程序类型
ARecord
是一种实用程序类型 – 这意味着它是 TypeScript 专门定义的用于帮助解决某个问题的类型。您可以在此处了解有关实用程序类型的更多信息
Typescript 记录类型如何工作#
假设您有一个如下所示的数据集。
const myData = {
"123-123-123" : { firstName: "John", lastName: "Doe" },
"124-124-124" : { firstName: "Sarah", lastName: "Doe" },
"125-125-125" : { firstName: "Jane", lastName: "Smith" }
}
我们的数据集的键有一个 ID,它的类型为string
。所有值都具有相同的格式或类型– 也就是说,每个值都有两个属性:firstName
和lastName
。
对于此数据结构,aRecord
是用于定义其特定类型的最佳实用程序类型。该Record
类型允许我们为key
(我们的 ID)和value
(我们的firstName
/lastName
对象)定义一个类型。我们可以Record
如下定义我们的类型:
type User = {
firstName: string,
lastName: string
}
const myData:Record<string, User> = {
"123-123-123" : { firstName: "John", lastName: "Doe" },
"124-124-124" : { firstName: "Sarah", lastName: "Doe" },
"125-125-125" : { firstName: "Jane", lastName: "Smith" }
}
TypeScript 中的AnyRecord
采用 形式Record<K, T>
,其中K
是键T
的类型,是值的类型。上面,我们User
为 values定义了一个新类型,并将我们的键设置为 type string
。
记录类型和联合类型#
有时,我们可以拥有一个带有一组预定义的可能键的对象。从 API 调用时尤其如此。例如:
const myData = {
"uk" : { firstName: "John", lastName: "Doe" },
"france" : { firstName: "Sarah", lastName: "Doe" },
"india" : { firstName: "Jane", lastName: "Smith" }
}
假设对于我们上面的数据集,键只能是三个值:uk、france或india。在这种情况下,我们可以为 定义一个类型User
,并为我们的 定义一个联合类型key
:
type User = {
firstName: string,
lastName: string
}
type Country = "uk" | "france" | "india";
const myData:Record<Country, User> = {
"uk" : { firstName: "John", lastName: "Doe" },
"france" : { firstName: "Sarah", lastName: "Doe" },
"india" : { firstName: "Jane", lastName: "Smith" }
}
使用这种方法,我们可以对允许的值以及我们应该遵循的类型强制执行严格的规则。由于这种数据结构非常常见,因此实用程序类型是 TypeScript 中最常用的实用程序类型之一。key
values
Record
结论#
该Record
类型是一个强大的工具,也是 TypeScript 中可用的最有用的实用程序类型之一。理解它的工作原理对于理解 TypeScript 很重要。有关更多有用的内容,请查看以下链接:
- TypeScript 充满了其他有用的实用程序类型,例如 Record。在这里阅读它们。
- TypeScript 新手?查看 Google 的 TypeScript 样式指南。