如何将常量注入到角度打字稿中的其他模块中?

时间:2016-02-20 12:55:12

标签: javascript angularjs typescript

在angular1中,我们以这种方式定义常量,

angular.module('taskApp', [
  'ui.router',
  'angular-loading-bar',
  'ngMessages',
])
.constant('url', {
   BASE: 'http://localhost:3222',
   BASE_API: 'http://localhost:3222/v1'
});

然后我可以将它注入我想要的任何模块中,

Auth.$inject = ['$http', 'url'];

function Auth($http, url)

现在使用打字稿,我也想这样做,我已经看过这种方法:Inject Angular Constants in TypeScript,这似乎没问题,但不是我正在寻找的方法。

从我的研究中

  static $inject = ["$resource", "url"];
  constructor(private $resource: ng.resource.IResourceService, private url: ng.IModule)

我正在使用IModule,因为它是angular&#39s的tsd文件中的唯一提示

/**
 * Register a constant service, such as a string, a number, an array, an object or a function, with the $injector. Unlike value it can be injected into a module configuration function (see config) and it cannot be overridden by an Angular decorator.
 *
 * @param name The name of the constant.
 * @param value The constant value.
 */
constant(name: string, value: any): IModule;
constant(object: Object): IModule;

但无法找到正确的属性来检索我的变量

enter image description here

1 个答案:

答案 0 :(得分:2)

一种方法是定义一个描述常量的接口。

interface URL_CONSTANTS {
   BASE: string,
   BASE_API: string
}

然后你就可以使用它作为注入常数的类型。

static $inject = ["$resource", "url"];
constructor(private $resource: ng.resource.IResourceService, private url: URL_CONSTANTS)