前提
- 非モジュールであること
- ESModuleやCommonJSモジュールではなく、scriptタグやgulpで結合する全てグローバルに存在する環境
- VSCodeを使っていること
- jsdocが書いてあること
やりかた
現在のファイルmain.js
に対して、同じ階層に型情報を読み込みたいファイルnot-module001.js
があるとします
その場合は、ファイルの任意の場所に以下のコメントを挿入します
/**@typedef {import("./not-module001.js")*/
挙動
そのファイルに記載されたjsdocを全て読み込み、同じスコープに存在するかのようにふるまってくれます。 少なくともクラス、オブジェクト、関数あたりは読めてます。
注意
この構文で別のファイルのjsdocに記載された型情報を補完することができています(2025年1月現在)。 しかし、何故この動きをしているのかは全く分かっていないです。
わかっていること
- ts-serverの機能を使っていること
- tsのjsdocの拡張構文を使っていること
- @typeでは同様の動きをしないこと
わかっていないこと
- jsdocの文法、TypeScriptのjsdoc拡張文法どちらの使い方としてもそんな記載がなさそうなこと
- たぶん
{import()}
はモジュールのみを想定しているので、非モジュールに対する使い方の言及が存在しない? import().AAA
みたいなことしても全型情報が読み込まれるのはそれによる気がする
- たぶん
別のやり方
ディレクトリ以下のすべてのjsファイルからglobal.d.ts
ファイルを生成することでよりオフィシャルになると考えられます。