如何将这个角度工厂转换为打字稿?

时间:2015-11-14 01:15:22

标签: javascript angularjs typescript

所以,我有这个'常量'工厂,只提供一些常量用于模板,模型和控制器。在我的角度控制器中,我只是正常constants.roles.ADMIN。这将如何转化为打字稿?

(function() {
  'use strict';    
  angular.module('App').factory('constants',  function(){
    return {    
      roles: {
        ADMIN:'admin',
        CLIENT:'client',
        USER:'user'
      },    
      loginStatus: {
        LOGGED_OUT: 'loggedOut',
        LOGGED_IN: 'loggedIn',
        LOGGING_IN: 'loggingIn',
      },   
    };    
  });    
}());

我想要一些看起来像这样的东西。这是我的尝试,但这似乎是不正确的。现在,我只是将它放在与我的模型相同的ts文件中以进行测试:

class constants {
      static roles:object {
        ADMIN:string = 'admin',
        CLIENT:string = 'client',
        USER:string = 'user'
      },    
      loginStatus: {
        LOGGED_OUT:string =  'loggedOut',
        LOGGED_IN:string =  'loggedIn',
        LOGGING_IN:string =  'loggingIn',
      },
  }

  class UserModel {
        //obviously this is just an example

        activeRole:string;

        isAdmin = () => {
            return this.activeRole == constants.roles.ADMIN;
        }
  }

但我无法跳转到定义,我的语法高亮显示我的静态类作为未使用的声明。

我是一个总的TS菜鸟,所以也许我正在接近这个错误。我该如何从工厂翻译成ts对象?

2 个答案:

答案 0 :(得分:1)

这应该是Typescript版本playground

class constants {
    public static roles = {
        ADMIN  : 'admin',
        CLIENT : 'client',
        USER   : 'user'
    };
    public static loginStatus = {
        LOGGED_OUT : 'loggedOut',
        LOGGED_IN  : 'loggedIn',
        LOGGING_IN : 'loggingIn',
    };
  }

  class UserModel {
        //obviously this is just an example

        activeRole:string;

        isAdmin = () => {
            // we need this. to access class member
            return this.activeRole == constants.roles.ADMIN;
        }
  }

此外,必须使用activeRole访问this

检查here

答案 1 :(得分:0)

你显然需要angular.constant而不是工厂。工厂适用于需要进行一些计算来创建对象或其他服务作为注入的情况。如果你使用常数值,你肯定应该使用angular.constant,如下所示:

angular.module('App').constant('constants',  {    
      roles: {
        ADMIN:'admin',
        CLIENT:'client',
        USER:'user'
      },    
      loginStatus: {
        LOGGED_OUT: 'loggedOut',
        LOGGED_IN: 'loggedIn',
        LOGGING_IN: 'loggingIn',
      },   
    };    
  );

另外需要提一下的是,如果你不需要不同的测试/开发值,我建议你应该使用ES6常量,这也有助于你在IDE中使用TypeScript检测类型错误,重构"明白"你的常数。