Jas*_*man 21 javascript enums class backbone.js typescript
我想以某种方式能够在我的TypeScript类上静态设置枚举,并能够通过导出类在内部和外部引用它.我对TypeScript很新,所以我不确定这个的正确语法,但下面是一些伪代码(扩展了Backbone模型)我希望能够用来实现我需要的东西. ..
class UnitModel extends Backbone.Model {
static enum UNIT_STATUS {
NOT_STARTED,
STARTED,
COMPLETED
}
defaults(): UnitInterface {
return {
status: UNIT_STATUS.NOT_STARTED
};
}
isComplete(){
return this.get("status") === UNIT_STATUS.COMPLETED;
}
complete(){
this.set("status", UNIT_STATUS.COMPLETED);
}
}
export = UnitModel;
Run Code Online (Sandbox Code Playgroud)
我需要能够在这个类中引用枚举,但我还需要能够在类之外引用枚举,如下所示:
import UnitModel = require('path/to/UnitModel');
alert(UnitModel.UNIT_STATUS.NOT_STARTED);//expected to see 0 since enums start at 0
Run Code Online (Sandbox Code Playgroud)
tho*_*epo 40
为此,您需要先在类外定义它,然后将其指定为静态属性.
enum UNIT_STATUS {
NOT_STARTED,
STARTED,
COMPLETED,
}
class UnitModel extends Backbone.Model {
static UNIT_STATUS = UNIT_STATUS;
isComplete(){
return this.get("status") === UNIT_STATUS.COMPLETED;
}
}
export = UnitModel;
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以在类之后声明一个命名空间,并在命名空间内声明枚举。例如:
class UnitModel extends Backbone.Model {
defaults(): UnitInterface {
return {
status: UNIT_STATUS.NOT_STARTED
};
}
isComplete(){
return this.get("status") === UNIT_STATUS.COMPLETED;
}
complete(){
this.set("status", UNIT_STATUS.COMPLETED);
}
}
namespace UnitModel {
export enum UNIT_STATUS {
NOT_STARTED,
STARTED,
COMPLETED
}
}
export = UnitModel;
Run Code Online (Sandbox Code Playgroud)
然后你可以使用UnitModel.UNIT_STSTUS来引用你的枚举。