Node.js が .ts を直接実行できる「型ストリッピング」を実際に動かす

これまで TypeScript を Node で走らせるには tsc でのビルド、あるいは ts-nodetsx といったローダが必要だった。2025 年後半から Node.js は「型ストリッピング(type stripping)」を標準搭載し、node file.ts でそのまま .ts を実行できるようになった。実験フラグや警告なしで使える「安定版」になったのは Node.js 24.12.0 と 25.2.0 からだ(機能自体は 22.18 / 23.6 でデフォルト有効化されていたが、実験警告が付いていた)。

型ストリッピングとは何か

Node は TypeScript をコンパイルしているわけではない。型注釈・interface・型エイリアスなど「実行時に消しても意味が変わらない構文」をそのまま削除(ストリップ)して、残った JavaScript を実行するだけだ。内部では Amaro(SWC の TypeScript パーサの WebAssembly ビルド @swc/wasm-typescript の薄いラッパ)を使っている。

重要な性質は 2 つ。

  • 型チェックはしない。型エラーがあっても Node は落ちない。型検査は別途 tsc --noEmit で行う。
  • コード生成が必要な構文は非対応enum、実行時コードを持つ namespace、コンストラクタのパラメータプロパティ、import エイリアスなどはエラーになる。これらは意図的に対象外で、必要なら tsx などを使う。

実際に試す

前提: Node.js 24.12.0 以上(または 25.2.0 以上)。バージョンを確認する。

1
2
node -v
# 例: v24.12.0

作業ディレクトリを作り、型注釈と interface を含む .ts を用意する。

1
mkdir try-node-ts && cd try-node-ts

greet.ts として保存する。

1
2
3
4
5
6
7
8
9
10
11
12
interface User {
name: string;
age: number;
}

function greet(user: User): string {
const label: string = `${user.name} (${user.age})`;
return `Hello, ${label}`;
}

const u: User = { name: "Hashito", age: 30 };
console.log(greet(u));

フラグなしでそのまま実行する。

1
node greet.ts

期待される出力。

1
Hello, Hashito (30)

interface と型注釈が削除され、残りの JavaScript がそのまま動いていることが分かる。ビルド成果物(greet.js)は生成されない。

非対応構文はきちんとエラーになる

enum はコード生成が必要なため型ストリッピングでは扱えない。badenum.ts を用意する。

1
2
enum Color { Red, Green }
console.log(Color.Red);

実行すると次のように弾かれる(抜粋)。

1
SyntaxError [ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX]: TypeScript enum is not supported in strip-only mode

このエラーコード ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX を覚えておくと、CI で「型ストリッピングでは動かない構文が混入した」ことに気づける。enum の代わりに const オブジェクトや union 型を使うか、tsx に切り替える。

型ストリッピングを無効化する

挙動を止めたい場合は --no-strip-types を付ける。すると .ts は素の JavaScript として解釈され、interface の時点で構文エラーになる。

1
node --no-strip-types greet.ts
1
2
3
interface User {
^^^^
SyntaxError: ...

「フラグなしなら型ストリッピングが有効」というデフォルト挙動を逆から確認できる。なお --experimental-transform-types(enum なども変換していた実験フラグ)は Node.js 26.0.0 で削除されたため、enum を Node 単体で動かす手段は現状ない。

型チェックは別に走らせる

型ストリッピングはあくまで実行時の話で、型の正しさは保証しない。開発では「実行は node file.ts で速く回し、型検査は別コマンド/CI で回す」構成が定番だ。

1
2
npm i -D typescript
npx tsc --noEmit

node は速いフィードバック、tsc --noEmit は型の門番、と役割を分けると、ローダ依存を減らしつつ型安全も保てる。

まとめ

Node.js の型ストリッピングは、ts-node/tsx を挟まずに .ts をそのまま実行できる標準機能で、24.12 / 25.2 から安定版になった。型チェックはしない・enum など一部構文は非対応、という割り切りを理解して使えば、小さなスクリプトや検証用コードの実行が一段軽くなる。手元に Node 24.12 以上があれば、上の greet.ts を貼って node greet.ts を試してほしい。

出典


Node.js が .ts を直接実行できる「型ストリッピング」を実際に動かす
https://blog.hashito.biz/2026/07/11/try-node-native-typescript-type-stripping/
著者
hashito
作成日
2026年7月11日
著作権