2014-09-13 58 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模式,因为这可以在一定有用情况。

相关问题