我有一个像这样的联合和对象:
type FilterType = 'equals' | 'notEquals';
const labelMap: {[filterType in FilterType]: string} = {
equals: 'Equals',
notEquals: 'Not Equals',
} as const;
我想由此得出:
type Labels = 'Equals' | 'Not Equals';
我能最接近的答案是:
type Labels = labelMap[keyof labelMap];
如果我删除注释,这将有效{[filterType in FilterType]: string}
,但我想保留它,所以如果我们添加新的过滤器,我们将被迫添加标签。
我如何注释对象键的类型并提取值?我可以将值设为自己的显式类型,然后使用:
const labelMap: {[filterType in FilterType]: ValueType} = {
但如果可能的话,我更愿意保持其集中化,这样您就不需要去多个地方添加新的过滤器。
只需使用
satisfies
运算符:如果向联合中添加新元素但未在中添加相应的条目,则会看到错误
labelMap
。操场
请注意,您的注释是“错误的”:
因为它没有保留键和值之间的映射!
操场