如何在TypeScript中创建类似枚举的类型?

22 浏览
0 Comments

如何在TypeScript中创建类似枚举的类型?

我正在为Google地图API for TypeScript编写一个定义文件。\n我需要定义一个类似枚举的类型,例如 google.maps.Animation,其中包含两个属性:BOUNCEDROP。\n在TypeScript中应该如何实现这个?

0
0 Comments

在TypeScript中创建类似枚举的类型有很多种方法,这个问题的出现是因为有人想知道如何创建类似枚举的类型。

解决方法有以下几种:

1. 使用TypeScript语言自带的枚举类型。在TypeScript中,可以使用enum关键字来定义枚举类型。例如:

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]; // 返回 "Green"

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();

上述代码中,定义了一个模块myModule,其中包含一个枚举类型Color和一个类MyClass。在MyClass的构造函数中,演示了如何使用枚举类型。

以上就是如何在TypeScript中创建类似枚举的类型的解决方法。通过使用TypeScript语言自带的枚举类型或在模块中定义枚举类型,可以方便地使用和管理枚举值。

0
0 Comments

问题的原因是在TypeScript 0.9版本之前,枚举类型的定义方式与之后的版本不同,旧版本的定义方式在新版本中已经失效。

解决方法是使用新版本的枚举定义方式,即使用enum关键字来定义枚举类型,并在花括号中列出枚举成员,每个成员都会被默认赋予一个数字值。如果想要显式地设置这些数字值,可以在成员后面使用等号进行赋值。通过这种方式,可以创建类似于枚举的类型。

下面是一个使用新版本枚举定义方式的示例:

enum TShirtSize {
  Small,
  Medium,
  Large
}
var mySize = TShirtSize.Large;

在这个示例中,TShirtSize枚举类型有三个成员:Small、Medium和Large。默认情况下,它们分别被赋予了0、1和2这三个数字值。通过将mySize变量赋值为TShirtSize.Large,可以使用枚举成员来表示具体的尺寸。

如果想要显式地设置枚举成员的数字值,可以在枚举声明中使用等号进行赋值。下面是一个使用显式数字值的枚举定义的示例:

enum TShirtSize {
  Small = 3,
  Medium = 5,
  Large = 8
}
var mySize = TShirtSize.Large;

在这个示例中,TShirtSize枚举类型的Small成员被赋值为3,Medium成员被赋值为5,Large成员被赋值为8。通过将mySize变量赋值为TShirtSize.Large,可以使用枚举成员来表示具体的尺寸。

需要注意的是,这种枚举定义方式在TypeScript 0.8版本中已经失效,所以如果之前使用了旧版本的定义方式,需要更新代码。

以上内容整理自《TypeScript for JavaScript Programmers》一书。

0
0 Comments

在TypeScript 0.9版本及更高版本中,可以使用enum来创建枚举类型。枚举类型可以用来定义一组具有命名值的常量。例如,我们可以定义一个名为AnimationType的枚举类型,其中包含BOUNCEDROP两个常量。

enum AnimationType {
    BOUNCE,
    DROP,
}

需要注意的是,最后一个逗号是可选的。

然而,我建议在目前阶段不要使用enum构造,因为TypeScript团队已经明确表示它将会更改,这意味着之前的代码可能会出现错误。

关于这种语言特性是否会更改的讨论,请参考相关的讨论。

另外,如果需要根据Maps API的定义来创建枚举类型,可以使用以下方式:

enum Animation {
    BOUNCE=1,
    DROP,
}

需要注意的是,Maps API中的枚举类型是从1开始定义的。

有关更多信息,请参考TypeScript 0.9版本的官方博客

0