Можете ли вы установить статическое перечисление внутри класса TypeScript?

Я хотел бы как-то статически установить enum в свой класс 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;

Мне нужно иметь возможность ссылаться на enum внутри этого класса, но мне также нужно иметь возможность ссылаться на enum вне класса, например:

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

Ответы

Ответ 1

Чтобы сделать это, вам нужно сначала определить его за пределами класса, а затем назначить его как статическое свойство.

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;