打字稿中带有字符串(引号文本)的枚举是否可能?
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
的用途。但是如果你有一个已经使用字符串的现有代码库,那么后一种方法可能会有用。
我不懂打字稿,也没有在任何地方找到任何信息,这样的构造是否可行?
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
的用途。但是如果你有一个已经使用字符串的现有代码库,那么后一种方法可能会有用。