Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串枚举作为TypeScript中的对象索引类型_Typescript - Fatal编程技术网

字符串枚举作为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){
返回映射器[原因];
}

操场链接

谢谢!这太棒了:)谢谢你!这太棒了:)