需要声明一个对象类型。得到下面提到的错误:
type CarKeys = "mercedes" | "mercedes-sedan" | "mercedes-hatch";
interface Car { color: string; }
const KEY_MAP = { mercedes: 'mercedes', mercedes_sedan: 'mercedes-sedan', mercedes_hatch: 'mercedes-hatch'};
const carType:Record<CarKeys, Car> = {
[KEY_MAP.mercedes]:{ color: 'red'},
[KEY_MAP.mercedes_sedan]: {color: 'yellow'},
[KEY_MAP.mercedes_hatch]: {color: 'black'}
};
TypeScript 抛出以下错误:
最佳答案
两件事,首先你写了 type CarKeys = "mercedes" | "mercedes_sedan" | "mercedes_hatch"
,都用 下划线 但 KEY_MAP
中的值有 连字符 ,这是你可能想要修复的不匹配。
其次,默认情况下 TS 会将 typeof KEY_MAP
推断为 { mercedes: string; ... }
而不是 { mercedes: "mercedes", ... }
。
这意味着 typeof [KEY_MAP.mercedes]
实际上是 string
,而不是 "mercedes"
字符串文字,因此 typeof carType
实际上是 { [key: string]: Car }
,这就是错误的原因。
要修复它,您可以将 as const
添加到 KEY_MAP
的末尾:
const KEY_MAP = {
mercedes: 'mercedes',
mercedes_sedan: 'mercedes-sedan',
mercedes_hatch: 'mercedes-hatch'
} as const;
或者,您可以将其转换为
enum
enum KEY_MAP {
mercedes = 'mercedes',
mercedes_sedan = 'mercedes-sedan',
mercedes_hatch ='mercedes-hatch'
}
关于typescript - 在 typescript 中声明对象类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59067315/