打字稿中带有字符串(引号文本)的枚举是否可能?

Is an enum with string (quoted text) in Typescript possible?

我不懂打字稿,也没有在任何地方找到任何信息,这样的构造是否可行?

export enum Something {
    'qwe' = 1,
    'rty' = 2,
    'uio' = 3,
}

如果您的目标是枚举,只需去掉引号即可。

enum Something {
  qwe = 1,
  rty = 2,
  uio = 3,
}

如果你想使用文字字符串,你可以只声明一个type

type Something = 'qwe' | 'rty' | 'uio';

如果您希望字符串 与整数关联,您可以声明一个对象,然后使用 keyof.

const Something = {
  qwe: 1,
  rty: 2,
  uio: 3,
}

type Something = keyof typeof Something;

这里使用了declaration merging,所以我们声明的两个Something名称在不同的命名空间中。 type Something 根据 value Something.

定义

现在Something是一个类型,其值是值Something中的任何字符串键,我们可以写Something[x]来转换该类型的值(同样,一个字符串) 成相应的数字。

如果你正在编写新的 Typescript 代码,我建议只使用 enum 并去掉引号;这就是 enum 的用途。但是如果你有一个已经使用字符串的现有代码库,那么后一种方法可能会有用。