我知道我可以有一個枚舉這樣的:我可以使用Enum引用一個文本字符串嗎?
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
var mySize = TShirtSize.Large;
但是有沒有我可以指定一個文本字符串,而不是數字3,5和8的方法嗎?
我知道我可以有一個枚舉這樣的:我可以使用Enum引用一個文本字符串嗎?
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
var mySize = TShirtSize.Large;
但是有沒有我可以指定一個文本字符串,而不是數字3,5和8的方法嗎?
您可以創建一個類,您可以使用完全基於字符串枚舉。演示:
class Enum {
constructor(private value: string) { }
/** For equality == with string */
toString() {return this.value }
/** For send to server serialization */
toJSON() {return this.value }
}
class Foo extends Enum {
static First = new Foo('First')
}
// From server to browser
var recievedDTO: { something: Foo } = <any>{
something: 'First'
}
console.log(recievedDTO.something == Foo.First); // true
// To server
var sendDTO = {
something: Foo.First,
}
console.log(JSON.stringify(sendDTO) == '{"something":"First"}'); // true
// Warning: don't use `===`
console.log(recievedDTO.something === Foo.First); // false
否 - 不允許使用字符串作爲「Number primitve類型的子類型」的枚舉值。
這在TypeScript Language Specification下幾節中有介紹。
(從9.1)枚舉類型是數字原語類型的不同子類型。
(從9.2)枚舉聲明的主體定義了零個或多個枚舉成員,它們是枚舉類型的命名值。 每個枚舉成員都有一個由 枚舉聲明引入的基本類型的關聯數值。
(從9.2)爲計算成員指定的表達式必須生成Any類型的值,Number原語類型或枚舉類型本身。
但是,請注意限制爲整數至少是「可取」,
(來自9.2)甲ConstantEnumMemberSection引入一個或多個恆定成員連續 積分值開始以指定的恆定值
(1.7)第9節介紹瞭如何編程人員也可以明確指明整數到e NUM成員..
在如果指定了非整數倍,則以下成員必須明確分配一個值的當前打字稿編譯器;但它是允許使用非積分作爲常數。這從上面的LS規則得出,枚舉是號碼的子類型,而不是更精確的「整數」。
使用字典是:
var enumStrings: { [id: TShirtSize] : string; } = {};
enumStrings[TShirtSize.Small] = "Very Small";
Enum
值存儲爲integers
, 我不認爲你可以存儲字符串常量作爲任何它的價值。 但是你可以使用# define
, 例如使用符號常量:
> # define small "any string1"
> # define medium "any string2"
等..
如果您希望能夠將標識符用作字符串描述;可以獲取枚舉,這是一個整數兩者的價值,它的名字 - 這裏有一個例子:
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
// 8
var sizeValue = TShirtSize.Large;
// "Large"
var sizeName = TShirtSize[sizeValue];
您可能還需要看一看在type-safe enum模式,因爲這可以在一定有用情況。