我知道我可以拥有这样的枚举:
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
var mySize = TShirtSize.Large;
但有没有办法可以指定文本字符串而不是数字3,5和8?
答案 0 :(得分: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 :(得分:1)
否 - 不允许使用字符串作为枚举的值,这些枚举是&#34;数字原始类型&#34;的子类型。
TypeScript Language Specification部分介绍了这一点。
(从9.1开始)枚举类型是数字基元类型的独特子类型。
(从9.2开始)枚举声明的主体定义了零个或多个枚举成员,这些成员是指定的值 枚举类型。 每个枚举成员都有一个由基元类型引入的关联数值 枚举声明。
(从9.2开始)为计算成员指定的表达式必须生成Any类型的值, Number基本类型或枚举类型本身。
但是,请注意,对整数的限制至少是建议&#34;,
(从9.2开始)ConstantEnumMemberSection引入一个或多个连续的常量成员 从指定的常量值开始的积分值 1
(从1.7开始)第9节描述了程序员如何明确地将整数分配给枚举成员..
1 在当前的TypeScript编译器中,如果指定了非整数,则必须明确地为以下成员分配值;但 允许使用非积分作为常量。根据上述LS规则,枚举是 number 的子类型,而不是更精细的&#34;整数&#34;。
答案 2 :(得分:1)
使用字典:
var enumStrings: { [id: TShirtSize] : string; } = {};
enumStrings[TShirtSize.Small] = "Very Small";
答案 3 :(得分:1)
如果您希望能够将标识符用作字符串描述;你可以获得枚举的值,它是一个整数,及其名称 - 这是一个例子:
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
// 8
var sizeValue = TShirtSize.Large;
// "Large"
var sizeName = TShirtSize[sizeValue];
您可能还想查看type-safe enum模式,因为这在某些情况下非常有用。
答案 4 :(得分:0)
Enum
个值存储为integers
,
我不认为你可以将字符串常量存储为其任何值。
但是,您可以使用# define
使用符号常量,
例如:
> # define small "any string1"
> # define medium "any string2"
依旧......