簡體   English   中英

如何在打字稿中為數字枚舉提供替代字符串定義

[英]How to have alternative string definition for numeric enum in typescript

我有一個像下面這樣的數字枚舉。

enum Rating {
  Unknown = 0,
  One,
  Two,
  Three,
  Four
}

當我訪問像下面這樣的枚舉字符串時,我需要獲取枚舉的替代字符串值。

var stringVal = Rating[Rating.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# 中的描述屬性

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);
  ...
}

有關兩種技術的演示,請參閱此 stackblitz

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM