tkrdrkk.xyz

TypeScriptのモジュールとスクリプトの話

ポイント

  • export宣言のある.tsファイルはモジュールである。
  • export宣言のない.tsファイルはスクリプトである。
  • スクリプト内で定義されたオブジェクト、型、関数はグローバルスコープになり、import宣言なしに別ファイルから参照できるようになる。

知らなかった~。

どういうことか

こういう書き方をしてもコンパイルエラーにならないということ。

type.ts

// exportなし
type Device = {
  id: string;
  name: string;
  description;
};

index.ts

// importしなくても参照可能
const device: Device = {
  // ...
};

元々グローバルスコープを積極的に使わない(使うとしてもdeclareぐらいしか使ったことない)ので、そもそも必要性を感じていなかったというのと、手なりでexport書いて明示的にimportするというのが身についていたので、まずこういうコードを書くことすらしていなかった。

気づくまでちょっとかかった

前述の通りグローバルスコープというとまずdeclare、次いでtsconfig.jsontypesの設定が思い浮かんだがどちらも当てはまらなくて少し混乱した。

ぶっちゃけ使い所はよくわからない。(今手元にないので記憶で書いているが)かのブルーベリー本のコラムにドンピシャな解説が載っており、export宣言を使う方を推奨していた。まあそうだよなと思う。

本以外でもuhyo さんの記事がめちゃ参考になる。