🔥

TypeScriptでpathのエイリアスを使用するとライブラリ公開時に型情報が失われることがある

2023/08/20に公開

tscはd.tsファイルのエイリアスを自動では解決してくれない。

tsconfig.json
{
  "compilerOptions": {
    "paths": {
      "~/*": ["./src/*"]
    },
  }

このようなエイリアスを張っていると便利だ。相対pathを気にせずにimportができる。
しかし、tscコマンドで型情報を含むd.tsファイルを生成する際、このpathエイリアスはそのまま残る。
結果として、他のプロジェクトでこのライブラリの型情報を利用しようとしても、正常に機能しない。エイリアスが解決されないため、d.tsファイル内でpathエイリアスを使って型をimportしている部分が動かないからだ。つまり型情報がなくなる。困る。

解決策

tsc-pathsというツールが公開されているので使わせていただいている。
ビルド後にtsc-paths -p tsconfig.json -s ./src -o ./distのようにコマンドを実行すると、pathエイリアスを解決して置換してくれる。

おわり

これで5時間溶かした。自分で作っていたライブラリを使っていて、「一部だけ型が適用されない!?なんで!?!?」となっていた。

Discussion