如何在打字稿中为数字枚举提供替代字符串定义
How to have alternative string definition for numeric enum in typescript
我有一个如下所示的数字枚举。
enum Rating {
Unknown = 0,
One,
Two,
Three,
Four
}
当我像下面这样访问枚举字符串时,我需要获取枚举的替代字符串值。
var stringVal = Rating[Rating.One];
上面一行应该给我 "Rating of One" 而不是 One。
我需要坚持使用数字枚举,不能使用字符串枚举。一旦解决方案,我能想到的就是使用如下所示的字符串数组。
const stringRating = ["Unknown Rating", "Rating One", "Rating is Two", "Rating is Three", "Rating is Four"];
export function toString(rating: Rating): string {
return stringValues[rating];
但是在打字稿中有没有更好的方法来实现这一点?
我期待像下面这样的枚举的 c# 中的 Description 属性
public enum MyEnum
{
[Description("value 1")]
Value1,
[Description("value 2")]
Value2,
[Description("value 3")]
Value3
}
您可以将枚举字符串存储在 Map
对象中:
ratingStrings = new Map<Rating,string>([
[Rating.Unknown, "Unknown Rating"],
[Rating.One, "Rating One"],
[Rating.Two, "Rating is Two"],
[Rating.Three, "Rating is Three"],
[Rating.Four, "Rating is Four"],
]);
doSomething() {
let str = this.ratingStrings.get(Rating.Unknown);
...
}
或者,如果所有枚举值的字符串格式都相同,您可以使用如下函数:
ratingToString(rating: Rating): string {
return `Rating ${Rating[rating]}`;
}
doSomething() {
let str = this.ratingToString(Rating.Unknown);
...
}
有关这两种技术的演示,请参阅 this stackblitz。
我有一个如下所示的数字枚举。
enum Rating {
Unknown = 0,
One,
Two,
Three,
Four
}
当我像下面这样访问枚举字符串时,我需要获取枚举的替代字符串值。
var stringVal = Rating[Rating.One];
上面一行应该给我 "Rating of One" 而不是 One。
我需要坚持使用数字枚举,不能使用字符串枚举。一旦解决方案,我能想到的就是使用如下所示的字符串数组。
const stringRating = ["Unknown Rating", "Rating One", "Rating is Two", "Rating is Three", "Rating is Four"];
export function toString(rating: Rating): string {
return stringValues[rating];
但是在打字稿中有没有更好的方法来实现这一点?
我期待像下面这样的枚举的 c# 中的 Description 属性
public enum MyEnum
{
[Description("value 1")]
Value1,
[Description("value 2")]
Value2,
[Description("value 3")]
Value3
}
您可以将枚举字符串存储在 Map
对象中:
ratingStrings = new Map<Rating,string>([
[Rating.Unknown, "Unknown Rating"],
[Rating.One, "Rating One"],
[Rating.Two, "Rating is Two"],
[Rating.Three, "Rating is Three"],
[Rating.Four, "Rating is Four"],
]);
doSomething() {
let str = this.ratingStrings.get(Rating.Unknown);
...
}
或者,如果所有枚举值的字符串格式都相同,您可以使用如下函数:
ratingToString(rating: Rating): string {
return `Rating ${Rating[rating]}`;
}
doSomething() {
let str = this.ratingToString(Rating.Unknown);
...
}
有关这两种技术的演示,请参阅 this stackblitz。