Я использую 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, который не загрязняет глобальную область?