JavaScriptのライブラリをTypeScriptで利用できるようにする方法について確認します。アンビエント宣言、型定義ファイル( .d.ts
)などの知識が必要です。
目次
アンビエント宣言( declare )
下記ソースは、javascriptであれば動作しますが、typescriptの場合、変数の宣言がされてないためコンパイルエラーとなります。
x = 30; // error TS2304: Cannot find name 'x'.
console.log(x); // error TS2304: Cannot find name 'x'.
declareキーワード
を使いアンビエント宣言をしておくことで、TypeScriptでも動作します。
declare var x: number;
x = 30;
console.log(x);
アンビエント宣言の部分は、型定義ファイル(.d.ts)
と呼ばれる別ファイルで管理することが推奨されています。
型定義ファイルは用意されていることが多い
JavaScriptのライブラリをTypeScriptで利用する場合、アンビエント宣言によって、型情報を後付で与える必要があります。アンビエント宣言は専用の別ファイル( .d.ts
)で管理します。
主要なJavaScriptライブラリの型定義ファイルは、DefinitelyTyped で管理されています。
typscript2.0以降
であれば、npmコマンドだけで型定義ファイルを取り込むことができます。
(以前は typings
を利用してました。)
# jqueryの型定義ファイルを取り込む
npm install --save-dev @types/jquery
型定義ファイルは、node_modules/@types
配下に追加されます。
typesyncコマンドを活用すると型定義ファイルの追加作業が楽になります。
typesyncで型定義ファイルを追加
typesyncは、package.jsonをチェックして、不足しているTypeScriptの型定義ファイルを追加してくれるツールです。typesyncの実行前と実行後の状態を確認します。
型定義ファイルが用意されていない場合
最近では、型定義ファイルが用意されていることがほとんどですが、もし存在しない場合、自身で型定義ファイルを用意する必要があります。
src/@types
などのフォルダを作成して、外部モジュールのアンビエント宣言を記述した型定義ファイル(.d.ts
)を用意します。
参考・補足
- https://github.com/DefinitelyTyped/DefinitelyTyped
- https://typescript-jp.gitbook.io/deep-dive/type-system/types
- https://typescript-jp.gitbook.io/deep-dive/type-system/intro
lib.d.ts
window
document
math
など一般的なJavaScriptのアンビエント宣言が含まれます。- https://typescript-jp.gitbook.io/deep-dive/type-system/lib.d.ts
- 定義ファイルの書き方
- 宣言ファイルの取得、使用、検索