2014-09-13 83 views

回答

3

您可以創建一個類,您可以使用完全基於字符串枚舉。演示:

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 
1

否 - 不允許使用字符串作爲「Number primitve類型的子類型」的枚舉值。

這在TypeScript Language Specification下幾節中有介紹。

(從9.1)枚舉類型是數字原語類型的不同子類型。

(從9.2)枚舉聲明的主體定義了零個或多個枚舉成員,它們是枚舉類型的命名值。 每個枚舉成員都有一個由 枚舉聲明引入的基本類型的關聯數值。

(從9.2)爲計算成員指定的表達式必須生成Any類型的值,Number原語類型或枚舉類型本身

但是,請注意限制爲整數至少是「可取」,

(來自9.2)甲ConstantEnumMemberSection引入一個或多個恆定成員連續 積分值開始以指定的恆定值

(1.7)第9節介紹瞭如何編程人員也可以明確指明整數到e NUM成員..

在如果指定了非整數倍,則以下成員必須明確分配一個值的當前打字稿編譯器;但它允許使用非積分作爲常數。這從上面的LS規則得出,枚舉是號碼的子類型,而不是更精確的「整數」。

1

使用字典是:

var enumStrings: { [id: TShirtSize] : string; } = {}; 
enumStrings[TShirtSize.Small] = "Very Small"; 
0

Enum值存儲爲integers, 我不認爲你可以存儲字符串常量作爲任何它的價值。 但是你可以使用# define, 例如使用符號常量:

> # define small "any string1" 
> # define medium "any string2" 

等..

1

如果您希望能夠將標識符用作字符串描述;可以獲取枚舉,這是一個整數兩者的價值,它的名字 - 這裏有一個例子:

enum TShirtSize { 
    Small = 3, 
    Medium = 5, 
    Large = 8 
} 

// 8 
var sizeValue = TShirtSize.Large; 

// "Large" 
var sizeName = TShirtSize[sizeValue]; 

您可能還需要看一看在type-safe enum模式,因爲這可以在一定有用情況。

相關問題