backbone.js 可以在TypeScript类中设置静态枚举吗?

pes8fvy9  于 2022-11-10  发布在  TypeScript
关注(0)|答案(2)|浏览(146)

我希望能够以某种方式在我的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;

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

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

ctzwtxfj1#

若要这样做,您必须先在类别之外定义它,然后将它指派为静态属性。

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;
mklgxw1f

mklgxw1f2#

您可以在类别之后宣告命名空间,并在命名空间内宣告枚举。例如:

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来引用枚举。

相关问题