Typescript Record记录类型如何工作

在尝试实现更复杂的数据类型时,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。所有值都具有相同的格式或类型– 也就是说,每个值都有两个属性:firstNamelastName

对于此数据结构,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" }
}

假设对于我们上面的数据集,键只能是三个值:ukfranceindia。在这种情况下,我们可以为 定义一个类型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 中最常用的实用程序类型之一。keyvaluesRecord

结论#

Record类型是一个强大的工具,也是 TypeScript 中可用的最有用的实用程序类型之一。理解它的工作原理对于理解 TypeScript 很重要。有关更多有用的内容,请查看以下链接: