require ではなく import を使う
TypeScript で型情報付きのモジュールをインポートするときは、ECMAScript 2015 の module 構文 で定義されている import
を使うようにすると、VSCode などで型情報を使った補完がうまく効くようにになります。
下記のように、Node.js で一般的に使用されていた CommonJS 形式の require
を使ってもインポートできますが、any
型の変数を定義していることになるため、型情報を用いた補完が効きません。
TypeScript でモジュールをインポートするときには、できるだけ import
を使う ようにしましょう。
インポートの例(関数ベースのモジュール)
Node.js のコアモジュール(os
や path
など)は、もともと TypeScript 用に作成されたものではありませんが、TypeScript 用の型情報が @types/node
モジュールとして提供されています。
これで、Node.js のコアモジュールを下記のように型情報付きでインポートできるようになります。
これは、複数の関数を export
する TypeScript モジュールをインポートする方法のよい例です。
これで、VSCode などの IDE で次のように補完が聞くようになります。
逆に、次のようにインポートしてしまうと、any
型の path
変数が定義されているものとみなされ、補完機能がうまく働きません。
インポートの例(クラスのインポート)
モジュールが export
しているクラスを個々にインポートする場合も同様に import
を使用します。
前者のように、import
キーワードを使ってインポートすれば、QnAMaker
は型情報だとみなされるため、TypeScript の型安全性をいかしたコーディングを行うことができます。