字符串枚举作为 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]]: '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

结束然后获得那些映射器键更可笑的是磨练:

  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 {
    ONE = 'one',
    TWO = 'two'
}

export type eKey = typeof SOME_STRING_ENUM[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',
}

function mapEnum(reason: SOME_STRING_ENUM) {
    return mapper[reason];
}

游乐场链接在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查给定的字符串在Typescript中的字符串枚举中是否作为值存在?

在TypeScript中按字符串设置枚举类型的变量

从联合类型创建TypeScript(字符串)枚举?

typescript枚举字符串类型Object.keys的数组

连接字符串作为Typescript中对象的键?

TypeScript字符串枚举中的反向映射

检查枚举TypeScript中的字符串值

Typescript - keyof 对象作为“或字符串选项”

TypeScript中的数字枚举允许任何数字,而字符串枚举不允许

TypeScript的字符串枚举-“类型...不可分配给类型...”

枚举vs字符串作为函数中的参数

如何检查字符串以将其缩小到枚举中的字符串,并让 TypeScript 识别它(节点示例)?

在TypeScript中用于查找字符串枚举值的准确类型

TypeScript 枚举键 - 字符串不可分配给类型 Enum

使用字符串类型参数访问枚举时,TypeScript TS7015错误

如何在Typescript中使用字符串变量值作为对象中的键名

如何从TypeScript中的字符串常量创建类似联合或枚举的行为?

如何将字符串类型转换为 Typescript 中的一种对象类型?

Typescript中的对象索引键类型

Typescript中嵌套对象的索引类型

在Typescript中键是字符串而值是对象数组的对象中声明类型的正确方法是什么?

循环内带有字符串的TypeScript索引对象

枚举TypeScript字符串文字

TypeScript类型字符串的特定字符

如何使用字符串索引访问 TypeScript 中的对象值

使用字符串枚举作为键名的Typescript联合数组

在 Typescript 中,使用字符串类型的键调用对象中的方法

TypeScript React:使用字符串数组作为索引并从状态获取值

ReactJS / Typescript:无法访问作为带编号索引的prop传递的字符串数组