今天,我面临着一个问题,我想要一个具有属性列表的对象,但具有以下特定值:
例如:
export type NBATeam = "Lakers" | "Celtics" | "Bulls" | "Warriors";
const nbaChampionships = {
Lakers: 17,
Celtics: 17,
Bulls: 6,
Warriors: 6
};
打字稿如何帮助我做到这一点?
好吧,TypeScript提供了一个实用程序类型的列表,这些列表使处理各种类型相关的操作变得更容易;这些utility types是Record
型。
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
是如此强大,有助于它确保对象符合特定形状。它保证对象的键和值是一定类型的,为我们的代码库增加了一定的可预测性。
我希望它对您有帮助;)