🥟
bun cli で TypeScript 実行は namespace 未対応 or tsconfig.json きちんと呼んでくれない?
bun は TS コードぺろっと動かしてくれて便利ですが,
で発生しましたがなんかどうも namespace 対応していなかったり, tsconfig.json きちんと読んでくれない模様?
bun add bun-types
で型情報取得し,
// tsconfig.json
{
"compilerOptions": {
"lib": ["ESNext"],
"module": "esnext",
"target": "esnext",
// "bun-types" is the important part
"types": ["bun-types"]
}
}
を用意しても,
// index.ts
import zlib from 'zlib';
console.log(zlib.constants.Z_SYNC_FLUSH)
な TS コードを bun run index.ts
とすると, zlib.constants
は namespace であるが,
bun-types を読まないのか, bun 内部の TS transpiler が namespace 対応していないのか, undefined になり,
TypeError: undefined is not an object (evaluating 'zlib.constants.Z_SYNC_FLUSH')
というエラーとなる.
tsconfig.json
で文法間違えても bun はうごくので実は tsconfig.json 読んでいない?
また, 該当する zlib.d.ts
いじって構文エラーにしてもエラーださないし...
zlib みたいにビルトインライブラリで他のパッケージの基本になっているのだと原因究明も難しく, work around もやりずらい.
(bun のビルトイン zlib は constants namespace がない deprecated version(?) の zlib モジュール使ってるのだろうか)
zlib の場合, constants 以外にも, Brotli あたりの対応もされていないようなので
しばらくは tsc or deno ですかね...
Discussion