如何在TypeScript中创build枚举types?
我正在为TypeScript的Google maps API定义文件。
我需要定义一个像枚举types例如。 包含两个属性的google.maps.Animation
: BOUNCE
和DROP
。
在TypeScript中应该怎么做?
TypeScript 0.9+有一个枚举规范:
enum AnimationType { BOUNCE, DROP, }
最后的逗号是可选的。
从TypeScript 0.9(目前是alpha版本)开始,你可以像这样使用枚举定义:
enum TShirtSize { Small, Medium, Large } var mySize = TShirtSize.Large;
默认情况下,这些枚举将分别分配0,1和2。 如果你想明确地设置这些数字,你可以这样做,作为枚举声明的一部分。
清单6.2使用显式成员的枚举
enum TShirtSize { Small = 3, Medium = 5, Large = 8 } var mySize = TShirtSize.Large;
这两个例子都直接从JavaScript的程序员的TypeScript中解脱出来。
请注意,这与0.8规范不同。 0.8规范看起来像这样 – 但它被标记为实验性的,可能会改变,所以你将不得不更新任何旧的代码:
免责声明 – 这个0.8例子将在新版本的TypeScript编译器中被破坏。
enum TShirtSize { Small: 3, Medium: 5, Large: 8 } var mySize = TShirtSize.Large;
这是现在的一部分语言。 有关此文档,请参阅TypeScriptLang.org>基本types>枚举 。 关于如何使用这些枚举的文档摘录如下:
enum Color {Red, Green, Blue}; var c: Color = Color.Green;
或者手动备份号码:
enum Color {Red = 1, Green = 2, Blue = 4}; var c: Color = Color.Green;
您还可以使用Color[2]
返回枚举名称。
下面是一个如何将这一切结合在一起的例子:
module myModule { export enum Color {Red, Green, Blue}; export class MyClass { myColor: Color; constructor() { console.log(this.myColor); this.myColor = Color.Blue; console.log(this.myColor); console.log(Color[this.myColor]); } } } var foo = new myModule.MyClass();
这将logging:
undefined 2 Blue
因为在写这篇文章的时候,Typescript Playground会产生这样的代码:
var myModule; (function (myModule) { (function (Color) { Color[Color["Red"] = 0] = "Red"; Color[Color["Green"] = 1] = "Green"; Color[Color["Blue"] = 2] = "Blue"; })(myModule.Color || (myModule.Color = {})); var Color = myModule.Color; ; var MyClass = (function () { function MyClass() { console.log(this.myColor); this.myColor = Color.Blue; console.log(this.myColor); console.log(Color[this.myColor]); } return MyClass; })(); myModule.MyClass = MyClass; })(myModule || (myModule = {})); var foo = new myModule.MyClass();
只是另一个说明,你可以用以下ID /string枚举:
class EnumyObjects{ public static BOUNCE={str:"Bounce",id:1}; public static DROP={str:"Drop",id:2}; public static FALL={str:"Fall",id:3}; }
更新 :
正如@ iX3所指出的, Typescript 2.4支持枚举string。
请参阅: 在Typescript中使用string值创build枚举
原始答案:
对于string成员值,TypeScript只允许将数字作为枚举成员值。 但是有一些解决scheme/黑客可以实施;
解决scheme1:
复制自: https : //blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/
有一个简单的解决scheme:在分配之前,只需将stringstring强制转换
export enum Language { English = <any>"English", German = <any>"German", French = <any>"French", Italian = <any>"Italian" }
解决scheme2:
复制自: https : //basarat.gitbooks.io/typescript/content/docs/types/literal-types.html
您可以使用string作为types。 例如:
let foo: 'Hello';
在这里,我们创build了一个名为foo的variables,它只允许将字面值“Hello”分配给它。 如下所示:
let foo: 'Hello'; foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"
它们本身并不是很有用,但可以组合在一个types联合中来创build一个强大的(有用的)抽象,例如:
type CardinalDirection = "North" | "East" | "South" | "West"; function move(distance: number, direction: CardinalDirection) { // ... } move(1,"North"); // Okay move(1,"Nurth"); // Error!