【问题标题】:Can you set a static enum inside of a TypeScript class?您可以在 TypeScript 类中设置静态枚举吗?
【发布时间】:2015-12-07 03:56:33
【问题描述】:

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

【问题讨论】:

    标签: javascript class backbone.js enums typescript


    【解决方案1】:

    你可以在你的类之后声明一个命名空间,并在命名空间内声明枚举。例如:

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

    【讨论】:

      【解决方案2】:

      为此,您需要先在类之外定义它,然后将其分配为静态属性。

      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;
      

      【讨论】:

      • typescript 不允许在类中定义枚举。多么糟糕的语言! ?
      猜你喜欢
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      相关资源
      最近更新 更多