需要声明一个对象类型。得到下面提到的错误:

 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/

10-12 22:01