如何根据 Typescript 中的 Record<K、T> 中的键定义类型?



假设我想构造一个对象类型,并将该类型映射到Record<Keys, Type>中提供的特定键。

例如,我有一个类型User,它可以是3个字符串中的一个——user、admin或regulator。我想要一个类型Stats,每个类型都有不同的属性。

使用联合类型这样做不会得到我所需要的:

type UserStats = {
timeOnline: string;
};
type AdminStats = {
timeAdmining: string;
};
type ModeratorStats = {
timeModerating: string;
};
type User = 'USER' | 'ADMIN' | 'MODERATOR';
type Stats = Record<User, UserStats | AdminStats | ModeratorStats>;

如何做到这一点?

您应该做相反的操作,即从Stats派生User以避免重复:

type UserStats = {
timeOnline: string;
};
type AdminStats = {
timeAdmining: string;
};
type ModeratorStats = {
timeModerating: string;
};
type User = keyof Stats;
type Stats = {
USER: UserStats;
ADMIN: AdminStats;
MODERATOR: ModeratorStats;
};

按照下面提到的进行更改

替换:

type Stats=记录<用户,UserStats|AdminStats|ModeratorStats>;

使用:

const Stats : Record<User, UserStats | AdminStats | ModeratorStats>={
USER:{timeOnline:"User"},
ADMIN:{timeAdmining:"Admin"},
MODERATOR:{timeModerating:"Moderator"}
};

console.log(Stats.ADMIN);

相关内容

最新更新