🥟

bun cli で TypeScript 実行は namespace 未対応 or tsconfig.json きちんと呼んでくれない?

2023/03/05に公開

bun は TS コードぺろっと動かしてくれて便利ですが,

https://zenn.dev/syoyo/articles/03153d8070ef52

で発生しましたがなんかどうも 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 であるが,

https://github.com/oven-sh/bun/blob/42f6b35a5be8bc0b48f7643618a8458c146e8272/packages/bun-types/zlib.d.ts#L372

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 あたりの対応もされていないようなので

https://github.com/oven-sh/bun/issues/267

しばらくは tsc or deno ですかね...

Discussion