AngularJS と TypeScript を使用しています。次のように、Typescript クラスを使用して AngularJS サービスを実装したいと考えています。
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();
});
しかし、それは私にコンパイルエラーを与えます(「予期しないトークン; 'ステートメント'が期待されます。」)。
私が考えることができる 1 つの可能な解決策は、TypeScript のインポートとエクスポートを何らかの形で使用することです。これにより、RequireJS が使用されます。これにより、おそらく定義関数内に HelloService がラップされ、HelloService によるグローバル スコープの汚染が回避されます。ただし、AngularJS アプリケーションで RequireJS を使用するのは今のところはしたくありません。なぜなら、AngularJS は私の用途には十分であり、複雑さが増すからです。
私の質問は、グローバル スコープを汚染しない TypeScript クラスを使用して AngularJS サービスを定義するにはどうすればよいですか?