如何在TypeScript中使用枚举的小写形式作为索引键类型
问题:基于枚举值小写形式定义对象类型键
我有如下枚举:
export enum NameSet { Taxi = 'Taxi ', Bus = 'Bus', Empty = '', }
我希望定义一个对象类型,使其键基于NameSet枚举的小写形式,尝试了如下写法:
type ITraffic = { [K in NameSet.toLowerCase()]?: string }
但这种写法不正确,请问是否可以实现该需求?
解决方案
可以实现,借助TypeScript的模板字面量类型和映射类型就能搞定:
- 先通过内置的
Lowercase<T>类型把枚举值转为小写形式:
type LowercaseNameSet = Lowercase<NameSet>;
- 再用映射类型遍历这个小写后的类型,生成目标对象类型:
type ITraffic = { [K in LowercaseNameSet]?: string; };
注意事项
- 你的
NameSet.Taxi值末尾带空格,转小写后会保留这个空格,对应键为'taxi '(带空格); NameSet.Empty转小写后是空字符串,会生成一个空字符串的可选键,若不需要这个键,可以用Exclude<T, U>过滤掉:
type NonEmptyLowercaseNameSet = Exclude<Lowercase<NameSet>, "">; type ITraffic = { [K in NonEmptyLowercaseNameSet]?: string; };
此时ITraffic的可选键就只有'taxi '和'bus'了。
内容的提问来源于stack exchange,提问作者user21357723
相关产品推荐
相关产品推荐

