我正在为 TypeScript 的 Google 地图 API 编写定义文件。
我需要定义一个枚举类型,例如。 google.maps.Animation
包含两个属性: BOUNCE
和 DROP
。
这应该如何在 TypeScript 中完成?
原文由 eNepper 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在为 TypeScript 的 Google 地图 API 编写定义文件。
我需要定义一个枚举类型,例如。 google.maps.Animation
包含两个属性: BOUNCE
和 DROP
。
这应该如何在 TypeScript 中完成?
原文由 eNepper 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新:
正如@iX3 所指出的, Typescript 2.4 支持枚举字符串。
原答案:
对于 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 许可协议
TypeScript 0.9+ 有一个枚举规范:
最后的逗号是可选的。