Wie kann ich einen AngularJS-Dienst mit einer TypeScript-Klasse definieren, die den globalen Bereich nicht verschmutzt?
Ich benutze AngularJS und TypeScript. Ich möchte einen AngularJS-Dienst mit einer Typescript-Klasse wie folgt implementieren:
class HelloService {
public getWelcomeMessage():String {
return "Hello";
}
}
angular.module('app.services.helloService', []).factory('helloService', () => {
return new HelloService();
});
Dies kompiliert mit dem folgenden Javascript-Code:
var HelloService = (function () {
function HelloService() {
}
HelloService.prototype.getWelcomeMessage = function () {
return "Hello";
};
return HelloService;
})();
angular.module('app.services.helloService', []).factory('helloService', function () {
return new HelloService();
});
Dies verschmutzt den globalen Namespace mit der Variablen HelloService, was ich offensichtlich nicht möchte. (Über die Chrome-Konsole habe ich festgestellt, dass HelloService ein Objekt ist.) Wie kann ich dieses Problem lösen / vermeiden?
Ich habe das Offensichtliche versucht:
angular.module('app.services.helloService', []).factory('helloService', function () {
class HelloService { ...}
return new HelloService();
});
Aber das gibt mir einen Kompilierungsfehler ("Unerwartetes Token; 'Anweisung' erwartet.").
Eine mögliche Lösung, die ich mir vorstellen kann, ist der Import und Export von TypeScript, der wiederum RequireJS verwendet. Dies wird den HelloService wahrscheinlich in eine definierte Funktion einschließen, wodurch eine Verschmutzung des globalen Gültigkeitsbereichs mit HelloService vermieden wird. Derzeit möchte ich RequireJS jedoch nicht in meiner AngularJS-Anwendung verwenden, da AngularJS meiner Meinung nach für meine Zwecke gut genug ist und die Komplexität erhöht.
Meine Frage ist also, wie ich einen AngularJS-Dienst mit einer TypeScript-Klasse definieren kann, die den globalen Bereich nicht verschmutzt.