🕌

【Node.js】Built-in TypeScriptへの第一歩 Type Strippingの試験的導入

2024/08/07に公開

概要

Node.jsのバージョン22.6.0で、新たなTypeScriptサポート機能が導入されました。
この新機能は、Node.jsがTypeScriptをbuilt-inとして扱うための第一歩として興味深いので、この機能について見ていきます。
https://nodejs.org/api/typescript.html#type-stripping

型の削除(Type Stripping)機能とは?

ファイル名:node-ts.tsとつけたTypeScriptのコードがあります。
このファイルをそのままNode.jsで実行すると、もちろんエラーが出ます。

node-ts.ts
type TestType = string;
const typescript: TestType = 'run-code';

console.log(typescript);

実行結果

node  node-ts.ts
# 実行結果
node:internal/modules/esm/get_format:214
  throw new ERR_UNKNOWN_FILE_EXTENSION(ext, filepath);

ここで新たに導入された--experimental-strip-typesフラグを使うと、
Node.jsからTypeScriptファイルを直接実行できるようになります。
実験的なオプションの警告メッセージは出るものの、文字列run-codeが出力されます。

node --experimental-strip-types node-ts.ts
# 実行結果
(node:177852) ~(実験的なオプションの警告メッセージ)
run-code

このようにフラグにより、ファイル内の型アノテーションを空白に置き換え、
型チェックを行わずにJavaScriptとしてコードを実行します。

サポートしていないTypeScriptの機能

ただなんでも出来るかというとそうではなく、
名前空間のような変換など、TypeScriptの高度な機能はまだサポートしていません。

  • 名前空間 (Namespaces)
  • 列挙型 (Enum)
  • デコレーター (experimentalDecorators)
  • パラメータプロパティ (Parameter properties)

今回のリリースにおけるスタンス

--experimental-strip-typesのオプション名にもあるように、
あくまで「実験的」であること「型の削除」に絞っているため、軽量であることを目的としています。
JavaScriptコード生成を必要とする構文をサポートせず、インライン型を空白に置き換えることで、ソースマップを必要とせずにTypeScriptコードを実行できるように設計しているようです。

この軽量な型削除に始まり、今後TypeScriptへの対応が徐々に入ってくるかもしれません。
将来的にどのように進化していくか、動向を追いかけていきます。

Discussion