2015-11-14 67 views
1

所以,我有这个'常量'工厂,只是提供了一些常数在模板,模型和控制器中使用。在我的角度控制器中,我通常只做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 noob,所以也许我接近这个错误。我应该如何将我的工厂翻译成ts对象?

回答

1

这应该是打字稿版本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

+0

啊,是的,我只是在SO窗口编码。很酷,这是有道理的。如果我想将其外部化到它自己的类中,那么我只需将类常量(我会将其大写)放在一个文件中,然后让它引用项目根目录,例如app.ts并且它可以工作,或者我应该明确地导入它从我的UserModel?我想这是一个完全不同的问题.... – FlavorScape

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', 
     }, 
    };  
); 

另一件事提的是,如果你不需要做检查的/ dev不同的值,我建议你应该使用ES6常量,这也将帮助TypeScript检测类型错误,重构,在你的IDE中将“理解”你的常量。