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

新手上路,请多包涵

我正在为 TypeScript 的 Google 地图 API 编写定义文件。

我需要定义一个枚举类型,例如。 google.maps.Animation 包含两个属性: BOUNCEDROP

这应该如何在 TypeScript 中完成?

原文由 eNepper 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 495
2 个回答

TypeScript 0.9+ 有一个枚举规范:

 enum AnimationType {
    BOUNCE,
    DROP,
}

最后的逗号是可选的。

原文由 Steve Lucco 发布,翻译遵循 CC BY-SA 3.0 许可协议

更新

正如@iX3 所指出的, Typescript 2.4 支持枚举字符串。

请参阅: 在 Typescript 中使用字符串值创建枚举


原答案:

对于 String 成员值,TypeScript 只允许将数字作为枚举成员值。但是您可以实施一些解决方案/技巧;

解决方案1:

复制自: https ://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/

有一个简单的解决方案:在分配之前将字符串文字转换为任何:

 export enum Language {
    English = <any>"English",
    German = <any>"German",
    French = <any>"French",
    Italian = <any>"Italian"
}

解决方案2:

复制自: https ://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html

您可以使用字符串文字作为类型。例如:

 let foo: 'Hello';

在这里,我们创建了一个名为 foo 的变量,它只允许将文字值 ‘Hello’ 分配给它。如下所示:

 let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"

它们本身并不是很有用,但可以在类型联合中组合以创建强大(且有用)的抽象,例如:

 type CardinalDirection =
    "North"
    | "East"
    | "South"
    | "West";

function move(distance: number, direction: CardinalDirection) {
    // ...
}

move(1,"North"); // Okay
move(1,"Nurth"); // Error!

原文由 Arthur 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进