Jak zdefiniować usługę AngularJS przy użyciu klasy TypeScript, która nie zanieczyszcza globalnego zakresu?
Używam AngularJS i TypeScript. Chcę zaimplementować usługę AngularJS za pomocą klasy Typescript, jak poniżej:
class HelloService {
public getWelcomeMessage():String {
return "Hello";
}
}
angular.module('app.services.helloService', []).factory('helloService', () => {
return new HelloService();
});
Kompiluje się do następującego kodu 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();
});
To zanieczyszcza globalną przestrzeń nazw zmienną HelloService, której oczywiście nie chcę. (Korzystając z konsoli Chrome, zweryfikowałem, że HelloService jest obiektem.) Jak mogę rozwiązać / uniknąć tego problemu?
Próbowałem tego, co oczywiste:
angular.module('app.services.helloService', []).factory('helloService', function () {
class HelloService { ...}
return new HelloService();
});
ale to daje mi błąd kompilacji („Nieoczekiwany token;” oświadczenie „oczekiwany”).
Jedno z możliwych rozwiązań, które mogę sobie wyobrazić, to jakoś zaimportować i wyeksportować TypeScript, który z kolei użyje RequireJS. Prawdopodobnie spowoduje to zawarcie HelloService w ramach funkcji definiującej, dzięki czemu uniknie się zanieczyszczenia globalnego zasięgu HelloService. Jednak na razie nie chcę używać RequireJS w mojej aplikacji AngularJS, ponieważ uważam, że AngularJS jest wystarczająco dobry do mojego użytku i dodaje złożoności.
Więc moje pytanie brzmi: jak mogę zdefiniować usługę AngularJS przy użyciu klasy TypeScript, która nie zanieczyszcza globalnego zasięgu?