假设我想构造一个对象类型,并将该类型映射到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);