Como posso definir um serviço AngularJS usando uma classe TypeScript que não polua o escopo global?
Eu estou usando AngularJS e TypeScript. Eu quero implementar um serviço AngularJS usando uma classe Typescript, assim:
class HelloService {
public getWelcomeMessage():String {
return "Hello";
}
}
angular.module('app.services.helloService', []).factory('helloService', () => {
return new HelloService();
});
Isto compila para o seguinte código 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();
});
Isso polui o namespace global com a variável HelloService, que obviamente não quero. (Usando o console do Chrome, verifiquei que o HelloService era um objeto.) Como posso resolver / evitar esse problema?
Eu tentei o óbvio:
angular.module('app.services.helloService', []).factory('helloService', function () {
class HelloService { ...}
return new HelloService();
});
mas isso me dá um erro de compilação ("Token inesperado; 'declaração' esperada").
Uma possível solução que posso imaginar é usar a importação e exportação do TypeScript de alguma forma, que por sua vez utilizará o RequireJS. Isso provavelmente envolverá o HelloService em uma função define, evitando assim a poluição do escopo global com o HelloService. No entanto, não quero usar o RequireJS no meu aplicativo AngularJS por enquanto, pois acho que o AngularJS é bom o suficiente para meu uso, e isso adiciona complexidade.
Então, minha pergunta é: como posso definir um serviço AngularJS usando uma classe TypeScript que não polua o escopo global?