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

Ответы на вопрос(4)

Ваш ответ на вопрос