字符串枚举作为TypeScript中的对象索引类型
考虑以下枚举:字符串枚举作为TypeScript中的对象索引类型,typescript,Typescript,考虑以下枚举: export const SOME_STRING_ENUM { ONE = 'one', TWO = 'two' } 现在让我们假设,我需要一些值映射器来映射这个枚举,我发现了这样一个怪物: export type eKey = keyof typeof SOME_STRING_ENUM; export const mapper: {[k in eKey]?: string} = { [SOME_STRING_ENUM[SOME_STRING_ENUM.ONE]]:
export const SOME_STRING_ENUM {
ONE = 'one',
TWO = 'two'
}
现在让我们假设,我需要一些值映射器来映射这个枚举,我发现了这样一个怪物:
export type eKey = keyof typeof SOME_STRING_ENUM;
export const mapper: {[k in eKey]?: string} = {
[SOME_STRING_ENUM[SOME_STRING_ENUM.ONE]]: 'This is label for one'
[SOME_STRING_ENUM[SOME_STRING_ENUM.TWO]]: 'This is label for two'
}
// please note referring to labels via [E[E.K]] not via just plain E.K
最终,获得这些映射器密钥对于hones来说更为荒谬:
public mapEnum(reason: SOME_STRING_ENUM) {
return mapper[SOME_STRING_ENUM[reason]];
}
嗯。。。以上方法效果良好。但它是丑陋的地狱,我不完全相信我在哪里错了,所以我需要使用双重引用实际上使我自己高兴地引用对象的标签。。。我预期的解决方案如下:
export type eKey = keyof typeof SOME_STRING_ENUM;
export const mapper: {[k in eKey]?: string} = {
[SOME_STRING_ENUM.ONE]: 'This is label for one'
[SOME_STRING_ENUM.TWO]: 'This is label for two'
}
public mapEnum(reason: SOME_STRING_ENUM) {
return mapper[reason];
}
使用字符串枚举器是否可以做到这一点?或者,像往常一样,我一开始就感到困惑
谢谢你的帮助 您可以改为使用枚举的值,而不是这里的键 为此,您可以通过
T[keyof T]
提取对象值,其中T
是您的枚举类型(typeof SOME_STRING_enum
)
这与您编写的第二个示例非常相似:
export enum SOME_STRING_enum{
一=‘一’,
二=‘二’
}
导出类型eKey=typeof SOME_STRING_ENUM[keyof typeof SOME_STRING_ENUM];
导出常量映射器:{[k in eKey]:字符串}={
[SOME_STRING_ENUM.ONE]:“这是一个的标签”,
[SOME_STRING_ENUM.TWO]:“这是两个的标签”,
}
函数mapEnum(原因:某些\u字符串\u ENUM){
返回映射器[原因];
}
游乐场链接您可以使用枚举的值,而不是此处的键 为此,您可以通过
T[keyof T]
提取对象值,其中T
是您的枚举类型(typeof SOME_STRING_enum
)
这与您编写的第二个示例非常相似:
export enum SOME_STRING_enum{
一=‘一’,
二=‘二’
}
导出类型eKey=typeof SOME_STRING_ENUM[keyof typeof SOME_STRING_ENUM];
导出常量映射器:{[k in eKey]:字符串}={
[SOME_STRING_ENUM.ONE]:“这是一个的标签”,
[SOME_STRING_ENUM.TWO]:“这是两个的标签”,
}
函数mapEnum(原因:某些\u字符串\u ENUM){
返回映射器[原因];
}
操场链接谢谢!这太棒了:)谢谢你!这太棒了:)