7月27日、海外のエンジニア向けメディアDEVCLASSが報じたところによると、Node.jsプロジェクトは実験的なTypeScriptサポートを追加した。
本記事は、以下のエキスパートに監修していただきました:
古川陽介さん(Japan Node.js Association代表理事)
この機能のプルリクエストに記載されたコメントによれば、「(Node.jsの)エコシステムを前進させるために重要であり、多くのユーザーが望んでいる。無視することはできない」「外部依存関係やローダーをインストールせずにnode foo.tsを実行したいというユーザーの要望を認める必要がある」と述べられている。
この実験的なフラグは--experimental-strip-typesであり、その名の通りコードから型を除去し、TypeScriptをJavaScriptに変換する。
制限事項
- まずは型を除去するための仕組みが入った。enumやnamespaceといった他のTypeScript機能はサポートされない。
- tsconfig.jsonファイルの設定は無視される。
- TypeScriptコードを参照可能なソースマップは生成されないが、(改行の挿入などにより)JavaScriptコード内での行番号は保持されるため、デバッグは可能
- node_modulesディレクトリ内のTypeScriptファイルはサポートされない。
このように、現在Node.jsに組み込まれたTypeScriptサポートはあくまで「型の除去」に限られている。厳密な型チェックを行うには、TypeScriptのコンパイラなどの他のツールと併用することが推奨される。
また、開発者が指摘するもう一つの問題は、新しいTypeScriptのバージョンがNode.jsのサポートライフサイクルと同期しなくなる可能性があることである。特にNode.jsの長期サポートバージョンを使用している場合には注意が必要で、LTS上のバージョンとの整合性をあわせていくための議論がloaderチーム内で行われているだけではなく、広くコメントを募集しようとしている。
(本件に関する懸念事項や経緯がazu氏によってまとめられているので参照のこと)
「型チェックを行わない」というサポートのあり方は、現在のJavaScriptランタイム業界でも一般的なアプローチとなりつつある。
bunも同様に型チェックを行わないし、Denoは型チェック可能ではあるが、パフォーマンスの理由から、デフォルトでは行わない設定になっている。
詳細はNode.js adds experimental TypeScript support, as it ""simply cannot be ignored"" • DEVCLASSを参照していただきたい。