Node.jsでTypeScriptを直接実行する:node app.tsの使い方
Node.js 22.6 以降、TypeScript ファイルをコンパイルなしで直接実行できます。tsc や ts-node をインストールしなくても node app.ts が動きます。
バージョンと対応状況
| Node.js バージョン | 状態 | 実行方法 |
|---|---|---|
| v22.6 〜 v22.x | 実験的 | node --experimental-strip-types app.ts |
| v23.0 以降 | フラグ不要 | node app.ts |
| v24.x(現在の LTS) | フラグ不要 | node app.ts |
Node.js 23 以降はフラグなしで node app.ts が動きます。
基本的な使い方
// app.ts
const greet = (name: string): string => {
return `Hello, ${name}!`
}
console.log(greet('World'))
node app.ts # Hello, World!
型注釈が含まれていても問題なく実行されます。
仕組み:型を「剥がす」だけ
Node.js は TypeScript をコンパイルせず、型注釈を取り除いて(strip) JavaScript として実行します。そのため:
- 型チェックは行われない(エラーがあっても実行される)
tscのような変換処理はない- 実行速度は通常の JS とほぼ同じ
型チェックが必要な場合は別途 tsc --noEmit を実行します。
使えない構文
型を「剥がす」だけの実装のため、TypeScript 固有の値を生成する構文は使えません。
// ❌ enum はエラー(値を生成するため非サポート)
enum Direction {
Up,
Down,
}
// ✅ interface・type・import type は使える
interface User {
name: string
age: number
}
import type { Readable } from 'stream'
| 構文 | 使える? |
|---|---|
interface / type |
✅ |
import type |
✅ |
型注釈(: string など) |
✅ |
as 型アサーション |
✅ |
enum |
❌ |
namespace |
❌ |
const enum |
❌ |
ts-node・tsx との違い
| ツール | コンパイル | 型チェック | インストール |
|---|---|---|---|
node(v23+) |
なし(strip) | なし | 不要 |
ts-node |
あり(tsc) | あり | 必要 |
tsx |
あり(esbuild) | なし | 必要 |
スクリプトや簡単なCLIツールなら node app.ts で十分です。型チェックが必要なプロジェクトでは ts-node または tsx + tsc --noEmit の組み合わせが適しています。
まとめ
- Node.js 22.6+ で TypeScript ファイルをそのまま実行できる
- Node.js 23 以降はフラグ不要。
node app.tsだけで動く - 型を「剥がす」だけなので型チェックは行われない
enum/namespaceなど値を生成する構文は非サポート- スクリプト・CLIツールの用途に向いている