有一个这样定义的typetype ComponentType = 'CPU' | 'Motherboard' | 'Memory' | 'PSU'

我想创建一个可用于映射ComponentType以显示字符串的对象,例如就像是:

  const componentTypeToLabel/*: to do*/ = {
    CPU: 'Computer processing unit',
    Motherboard: 'Motherboard',
    Memory: 'Memory',
    PSU: 'Power supply unit',
  };


但是,需要额外考虑的是,该componentTypeToLabel不会仅包含某些ComponentType可能的值。

componentTypeToLabel的类型定义是什么样的?如何定义该类型?我知道如果ComponentTypeenum而不是怎么做(相信它将是const componentTypeToLabel: { [key in ComponentType]? : string } = ...),但是当ComponentType是字符串联合type时却没有。

最佳答案

您要查找的类型是Partial<Record<ComponentType, string>>或等效的{[K in ComponentType]?: string}

type ComponentType = 'CPU' | 'Motherboard' | 'Memory' | 'PSU';
const componentTypeToLabel: Partial<Record<ComponentType, string>> = {
  CPU: 'Computer processing unit',
  Motherboard: 'Motherboard',
  Memory: 'Memory',
  PSU: 'Power supply unit',
};


PartialRecord都内置在mapped types中;您可以在嵌入式TypeScript手册链接中了解有关它们的更多信息。

希望能有所帮助;祝好运!

Playground link to code

08-16 02:00