eNe*_*per 109 enums typescript
我正在为TypeScript的Google maps API制作定义文件.
我需要定义类似枚举的例如.google.maps.Animation它包含两个属性:BOUNCE和DROP.
应该如何在TypeScript中完成?
小智 129
TypeScript 0.9+有一个枚举规范:
enum AnimationType {
BOUNCE,
DROP,
}
Run Code Online (Sandbox Code Playgroud)
最后一个逗号是可选的.
Fen*_*ton 64
从TypeScript 0.9(目前是alpha版本)开始,您可以像这样使用枚举定义:
enum TShirtSize {
Small,
Medium,
Large
}
var mySize = TShirtSize.Large;
Run Code Online (Sandbox Code Playgroud)
默认情况下,这些枚举将分别分配0,1和2.如果要显式设置这些数字,可以将其作为枚举声明的一部分.
清单6.2具有显式成员的枚举
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
var mySize = TShirtSize.Large;
Run Code Online (Sandbox Code Playgroud)
这两个示例都直接从TypeScript for JavaScript程序员中解脱出来.
请注意,这与0.8规范不同.0.8规范看起来像这样 - 但它被标记为实验性的并且可能会改变,因此您将不得不更新任何旧代码:
免责声明 - 这个0.8示例将在较新版本的TypeScript编译器中被破坏.
enum TShirtSize {
Small: 3,
Medium: 5,
Large: 8
}
var mySize = TShirtSize.Large;
Run Code Online (Sandbox Code Playgroud)
Jer*_*oen 23
现在这是该语言的一部分.有关此文档,请参阅TypeScriptLang.org>基本类型>枚举.有关如何使用这些枚举的文档的摘录:
enum Color {Red, Green, Blue};
var c: Color = Color.Green;
Run Code Online (Sandbox Code Playgroud)
或者使用手动支持号码:
enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;
Run Code Online (Sandbox Code Playgroud)
您也可以使用例如返回枚举名称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();
Run Code Online (Sandbox Code Playgroud)
这将记录:
Run Code Online (Sandbox Code Playgroud)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();
Run Code Online (Sandbox Code Playgroud)
don*_*son 14
另外请注意,您可以使用以下内容进行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};
}
Run Code Online (Sandbox Code Playgroud)
更新:
正如@ 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"
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:
复制自:https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html
您可以使用字符串文字作为类型.例如:
let foo: 'Hello';
Run Code Online (Sandbox Code Playgroud)
这里我们创建了一个名为foo的变量,它只允许为它分配文字值"Hello".这在下面说明:
let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"
Run Code Online (Sandbox Code Playgroud)
它们本身并不是很有用,但可以组合在一个类型联合中来创建一个强大的(有用的)抽象,例如:
type CardinalDirection =
"North"
| "East"
| "South"
| "West";
function move(distance: number, direction: CardinalDirection) {
// ...
}
move(1,"North"); // Okay
move(1,"Nurth"); // Error!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90866 次 |
| 最近记录: |