有一个这样定义的type
:type 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
的类型定义是什么样的?如何定义该类型?我知道如果ComponentType
是enum
而不是怎么做(相信它将是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',
};
Partial
和Record
都内置在mapped types中;您可以在嵌入式TypeScript手册链接中了解有关它们的更多信息。希望能有所帮助;祝好运!
Playground link to code