Как определить службу AngularJS, используя класс TypeScript, который не загрязняет глобальную область?
Я использую AngularJS и TypeScript. Я хочу реализовать сервис AngularJS, используя класс Typescript, например так:
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. Однако пока я не хочу использовать RequireJS в своем приложении AngularJS, так как я думаю, что AngularJS достаточно хорош для моего использования, и это добавляет сложности.
Итак, мой вопрос: как я могу определить службу AngularJS, используя класс TypeScript, который не загрязняет глобальную область?