web-dev-qa-db-ja.com

TypeScriptクラス内に静的列挙を設定できますか?

どういうわけか、TypeScriptクラスに列挙型を静的に設定し、クラスをエクスポートすることで、内部と外部の両方でそれを参照できるようにしたいと考えています。私は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
22
Jason Addleman

これを行うには、まずクラスの外部で定義してから、静的プロパティとして割り当てる必要があります。

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;
40
thoughtrepo