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.jsonのtypesの設定が思い浮かんだがどちらも当てはまらなくて少し混乱した。
ぶっちゃけ使い所はよくわからない。(今手元にないので記憶で書いているが)かのブルーベリー本のコラムにドンピシャな解説が載っており、export宣言を使う方を推奨していた。まあそうだよなと思う。
本以外でもuhyo さんの記事がめちゃ参考になる。