お久しぶりです、PlugOutです。
今回はプログラミングのお話。
最近Angular2を使っていて、どうしてもAngular2の非対応モジュールを使わなければならない場面に出くわしたのでメモ程度に書きます。
TypeScriptでAngular2のコードを書いていると、内部でJavaScriptのAngular2に非対応なライブラリを呼び出そうとするとコンパイルエラーが発生します。
jQueryとかだと型ファイルを取りこめばうまく解消されたりするんですけどね。
その場合に無理やりそのモジュールを呼び出すのがeval()でゴリ押しするという方法。
外部JavaScriptファイルで定義された、HogeというクラスのdoFuga()を呼び出したい場合はこう書きます。
let hoge = null; eval("hoge = new Hoge();"); hoge.doFuga();
こう記述してやると、コンパイルエラーにならずに無理やりHogeのクラスを生成できます。
何でこれが可能かっていうと、TypeScriptって最終的にはJavaScriptになって動くからで、無理やりコンパイルの部分のチェックをスキップさせているからなんですが……。
まぁただJavaのReflectionと同じで黒魔術感が半端ないので、できれば使わない方がよさそうです。
どうしようも無くなった時の最終手段的な感じで使うと良いのかな?
※ エンジニア系のネタは下のブログに移行中です。