你能在TypeScript类中设置一个静态enum吗?

Can you set a static enum inside of a TypeScript class?

本文关键字:一个 静态 enum TypeScript 设置      更新时间:2023-09-26

我想以某种方式能够静态地在我的TypeScript类上设置一个enum,并能够通过导出类在内部和外部引用它。我对TypeScript相当陌生,所以我不确定正确的语法,但下面是一些伪代码(它扩展了骨干模型),我希望能够使用它来实现我需要的…

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;

我需要能够在类内部引用枚举,但我也需要能够在类外部引用枚举,如下所示:

import UnitModel = require('path/to/UnitModel');
alert(UnitModel.UNIT_STATUS.NOT_STARTED);//expected to see 0 since enums start at 0

要做到这一点,您需要首先在类外部定义它,然后将其作为静态属性赋值。

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;

可以在类之后声明名称空间,并在名称空间内声明enum。例如:

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;

那么你可以使用UnitModel.UNIT_STSTUS来引用你的enum