我正在使用 AngularJS 和 TypeScript。我想使用 Typescript 类实现 AngularJS 服务,如下所示:
class HelloService {
public getWelcomeMessage():String {
return "Hello";
}
}
angular.module('app.services.helloService', []).factory('helloService', () => {
return new HelloService();
});
这将编译为以下 javascript 代码:
var HelloService = (function () {
function HelloService() {
}
HelloService.prototype.getWelcomeMessage = function () {
return "Hello";
};
return HelloService;
})();
angular.module('app.services.helloService', []).factory('helloService', function () {
return new HelloService();
});
这会用变量 HelloService 污染全局命名空间,这显然是我不想要的。(使用 Chrome 的控制台,我验证了 HelloService 是一个对象。)我该如何解决/避免这个问题?
我尝试了明显的:
angular.module('app.services.helloService', []).factory('helloService', function () {
class HelloService { ...}
return new HelloService();
});
但这给了我一个编译错误(“意外的令牌;预期的'声明'。”)。
我能想到的一种可能的解决方案是以某种方式使用 TypeScript 的导入和导出,而后者又将使用 RequireJS。这可能会将 HelloService 包装在一个定义函数中,从而避免 HelloService 对全局范围的污染。但是,我现在不想在我的 AngularJS 应用程序中使用 RequireJS,因为我认为 AngularJS 对我的使用来说已经足够好了,而且它增加了复杂性。
所以,我的问题是,如何使用不会污染全局范围的 TypeScript 类来定义 AngularJS 服务?