環境
$ npx parcel --version
1.12.5
$ npx tsc --version
Version 4.3.5
事象
TypeScriptを使ってちょっとしたツールを書いていた。
始めはtsc
を使ってコンパイルを行なっていたのだが、出力を1つにまとめたいと思いparcel
を用いてバンドルを行なった。
parcelはtsconfig.jsonを見てTypeScriptからのコンパイルからバンドリングまでよしなにやってくれる便利なツールであるが、型定義の出力はサポートしてくれないようである1。
Issueに言われているようにparcelにプラグインをかませばできたようだが開発が止まっているようだ。
解決策
parcel
によるビルドとは別にtsc
を動かし型定義を得ることにした。
package.json
"scripts": {
"build": "parcel build src/main.ts",
"build:types": "tsc --declaration --emitDeclarationOnly --outdir './types'"
},
tsc
を使って型定義を出力するにはtsconfig.json
ファイルで"declaration": true
とすればよい。
さらに"emitDeclarationOnly": true
と指定すると、型定義のみを出力することができる2。
parcelはtsconfig.json
を読んではいるが、これらのオプションに関しては無視するようである。だからtsconfig.json
にこれらを書いてしまっても構わないのだが、それは少し気持ち悪い。
そこで、次のようにtsc
コマンドのオプション引数として指定してやることにした。
npx tsc --declaration --emitDeclarationOnly
# --outDirオプションは本来生成物の出力先を指定するものだが、
# これらと組み合わせると、型定義のみを特定のディレクトリに保存するような使い方ができる
npx tsc --declaration --emitDeclarationOnly --outDir './types'