需要声明一个对象类型。得到下面提到的错误:
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抛出以下错误:
类型'{[x:字符串]:{颜色:字符串}}'缺少类型'记录'的以下属性:奔驰,梅赛德斯轿车,奔驰车舱口`
有两件事,首先是您写的type CarKeys = "mercedes" | "mercedes_sedan" | "mercedes_hatch"
,都带有下划线,但是其中的值KEY_MAP
带有连字符,这可能不适合您解决。
其次,默认情况下,TS将推断typeof KEY_MAP
为{ mercedes: string; ... }
而不是{ mercedes: "mercedes", ... }
。
这意味着typeof [KEY_MAP.mercedes]
实际上是string
,而不是"mercedes"
字符串文字,因此typeofcarType
实际上是{ [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'
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句