我知道我可以有一个枚举这样的:我可以使用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模式,因为这可以在一定有用情况。