你能在TypeScript类中设置静态枚举吗?

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)

  • typescript不允许在类内定义枚举。多么糟糕的语言! (2认同)

小智 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来引用你的枚举。