如何在打字稿中使用记录类型
#javascript #typescript #datastructures

今天,我面临着一个问题,我想要一个具有属性列表的对象,但具有以下特定值:

例如:

export type NBATeam = "Lakers" | "Celtics" | "Bulls" | "Warriors";

const nbaChampionships = {
    Lakers: 17,
    Celtics: 17,
    Bulls: 6,
    Warriors: 6
};

打字稿如何帮助我做到这一点?

好吧,TypeScript提供了一个实用程序类型的列表,这些列表使处理各种类型相关的操作变得更容易;这些utility typesRecord型。

Record类型是什么?

Record类型允许我们使用指定键及其相应值构造对象类型,因此我们可以将其视为定义地图或字典。

深处就像:

type Record<K extends keyof any, T> = {
    [P in K]: T;
};

使用Record,您本质上是在告诉打字稿:“嘿,我想要一个具有K键的对象,这些键下的每个值都应为T。”

了解有关Record Types

的更多信息

示例

假设我们想创建一种代表不同NBA球队赢得的冠军数量的类型。我们可以定义我们的团队名称和冠军数量的相应类型:

type NBATeam = "Lakers" | "Celtics" | "Bulls" | "Warriors";
type Championships = number;

使用Record类型,我们可以创建一种将每个NBA团队映射到他们赢得的冠军数量的类型:

type ChampionshipRecord = Record<NBATeam, Championships>;

这告诉Typescript,我们的ChampionshipRecord类型是每个键是NBATeam的对象,每个值是Championships(number)。

现在,让我们使用这种类型:

const nbaChampionships: ChampionshipRecord = {
    Lakers: 17,
    Celtics: 17,
    Bulls: 6,
    Warriors: 6
};

console.log(`Lakers have won ${nbaChampionships.Lakers} championships.`);

如果您不小心添加不在我们的NBATEAM类型中的团队或为不是数字的冠军的价值,则会产生编译时间错误,确保我们的数据保持一致。

回顾

对我来说,Record是如此强大,有助于它确保对象符合特定形状。它保证对象的键和值是一定类型的,为我们的代码库增加了一定的可预测性。

我希望它对您有帮助;)