npx ts-node a.ts が TypeError: Cannot read properties of undefined (reading 'fileExists') で止まるのは、ts-node 10.9.2(いま npm で入る最新の版。2023年12月8日)を、TypeScript 7.0.2 を入れたプロジェクトで動かしたときです。tsconfig.json が無くても、npx tsc --init で作った tsconfig.json があっても、同じ文で止まりました。ts-node は、TypeScript のファイルをその場で JavaScript に変えて動かす道具です。
直し方は、ts-node の代わりに npx tsx a.ts で動かすことです。TypeScript 7.0.2 を入れたままで動きました。Node.js が新しい版(22 系は 22.18.0 以上、24 系以降)なら、node a.ts でも動きます。ただし node a.ts は、enum のように型を消すだけでは済まない書き方があると止まります。どちらも型を調べないので、型の誤りは npx tsc --noEmit で別に調べます。
動かすときに型も調べる ts-node を使い続けたいなら、TypeScript 7 と 6 を同じプロジェクトに並べて入れる手があります(TypeScript の公式の告知にある入れ方です。告知は ts-node の名前は挙げていません)。ただし、手元で ts-node が動いて、型の誤りも TS2322(TypeScript がエラーごとに付けている番号)で止めたのは、"type": "commonjs" のプロジェクトに 6 系と 7 系を並べて入れ、tsconfig.json に "module": "commonjs" を書いたときでした。"type": "module" のプロジェクトでは、Hello, tsx と出ても、型の誤りがあっても止まりませんでした(理由は確かめていません)。ts-node の issue #2174 は、2026年10月23日時点で開いたままです。
確かめた環境は、Node.js 24.22.1・npm 11.19.1・ts-node 10.9.2・TypeScript 7.0.2 と 6.0.3 です。Docker の Linux で、2026年10月23日に流しました。Windows と macOS では流していません。出力のパスの頭は … に省きました。
- ts-node 10.9.2 が TypeScript 7.0.2 で止まるときのエラーの全文(tsconfig.json の有無によらず同じ)
npx tsxとnodeに替える直し方と、型はtsc --noEmitで別に調べること- ts-node を使い続けるときの、TypeScript 6 系との並べ入れと、
"type": "commonjs"・"type": "module"で分かれた結果 - ts-node の最後の版と issue #2174 の状態(2026年10月23日時点)
ts-node が TypeScript 7 で止まるのはどんなとき?
TypeScript 7.0.2 を入れたフォルダーで ts-node 10.9.2 を動かしたときです。動かすファイル a.ts は、次の 2 行です。
const greet = (name: string): string => `Hello, ${name}`;
console.log(greet("tsx"));
エラーの全文(TypeError: Cannot read properties of undefined (reading 'fileExists'))
tsconfig.json が無いフォルダーでの出力です。ts-node のソースの行とスタックは略しました。
$ npx ts-node --version
v10.9.2
$ npx ts-node a.ts
…/node_modules/ts-node/dist/configuration.js:91
const { fileExists = ts.sys.fileExists, readFile = ts.sys.readFile, skipProject = index_1.DEFAULTS.skipProject, project = index_1.DEFAULTS.project, tsTrace = index_1.DEFAULTS.tsTrace, } = rawApiOptions;
^
TypeError: Cannot read properties of undefined (reading 'fileExists')
at readConfig (…/node_modules/ts-node/dist/configuration.js:91:33)
Node.js v24.22.1
npx tsc --init で作った tsconfig.json があるフォルダーでも、同じ文で止まりました(ほかの書き方の tsconfig.json では流していません)。ソースの行とスタックは、ここでも略しました。
$ npx tsc --init
Created a new tsconfig.json
You can learn more at https://aka.ms/tsconfig
$ npx ts-node a.ts
…/node_modules/ts-node/dist/configuration.js:91
const { fileExists = ts.sys.fileExists, readFile = ts.sys.readFile, skipProject = index_1.DEFAULTS.skipProject, project = index_1.DEFAULTS.project, tsTrace = index_1.DEFAULTS.tsTrace, } = rawApiOptions;
^
TypeError: Cannot read properties of undefined (reading 'fileExists')
Node.js v24.22.1
TypeScript 7.0 には API が無い
TypeScript の公式の告知は、「While TypeScript 7.0 is here, it does not ship with an API.」と書いています。API とは、プログラムから TypeScript の機能を呼ぶための入り口のことです。告知は、typescript を呼び出す道具のために、7.0 と 6.0 を並べて使えるようにしたことも書いています。その例として名前が挙がっているのは typescript-eslint で、ts-node の名前は出てきません。
ts-node が止まる理由を書いた公式の文は見つかっていません。そこで、この記事では「7.0 には API が無い」ことと「ts-node は 7.0.2 で上のエラーで止まる」ことを、並べて書くだけにします。2 つをつなげた説明は書きません。TypeScript 7 の変化と、並べ入れの手順の説明は、TypeScript 7 の記事にあります。
ts-node の版と issue(2026年10月23日時点)
- ts-node の最後の版は 10.9.2 です。npm に出たのも、GitHub のリリース(v10.9.2)も、2023年12月8日です。main の最後のコミットは、2023年12月12日です
- 10.9.2 の peer dependency(組み合わせて使う側の
typescriptの条件)は>=2.7で、7 を除いてはいません - GitHub の issue #2174「ts-node doesn't work with Typescript 7.0.2」は、2026年7月9日(UTC)に立てられ、10月23日時点で開いたままです。コメントは 8 件で、書いた人の立場はどれも
NONEです(リポジトリのメンバー・持ち主・協力者のコメントはありません) - issue の本文は、7 が出た7月8日の 16:00 UTC から CI が壊れ、TypeScript を 6.0.3 に戻して直した、という報告です。その人の設定は分かりません
issue は公式の文書ではないので、ここで言えるのは、日付と開いたままの状態までです。
どう直す? ts-node をやめて tsx か node で動かす
Node.js の文書は、TypeScript の全部の機能(tsconfig.json も)が要るなら外のパッケージを使い、軽く動かすだけなら組み込みの型の取り除き(type stripping)を使う、と書いています。外のパッケージの例に挙がっているのが tsx です。この順(tsx、node)で試します。tsx と ts-node と node のくらべは、npx tsx の記事にまとめました。
npx tsx で動かす
TypeScript 7.0.2 を入れたフォルダーで、npx tsx はそのまま動きました。tsconfig.json が無いフォルダーでも、npx tsc --init の tsconfig.json があるフォルダーでも、同じです。
$ npx tsx a.ts
Hello, tsx
初めて流すときは、npm が tsx を入れるという案内の行を出します。その行と tsx の版の見方は、npx tsx の記事に書きました。
プロジェクトに入れるなら、tsx の文書によると npm install -D tsx です。package.json の scripts では、npx なしで tsx ./file.ts と書けます。
node で動かす(Node.js 22.18.0 以上)
Node.js は、型の書き方(注釈など)を空白に置き換えるだけの形なら、TypeScript のファイルをそのまま動かせます。
$ node a.ts
Hello, tsx
Node.js の文書によると、この機能は既定で有効で、24 系では安定版です。手元では 24 系(24.22.1 と 24.13.0)で流しました。止めるときは --no-strip-types(24 系。22 系は --no-experimental-strip-types)を付けます。
ts-node から替えるときに変わる書き方が 2 つあります。型を import するときは type を付けること、import にはファイルの拡張子(./file.ts)を付けることです。type が要るのは、付けない import を値の import として扱う仕組みだからで、拡張子は JavaScript のファイルと同じ決まりだと、Node.js の文書は書いています。enum のように、型を消すだけでは済まない書き方は止まります。詳しくは npx tsx の記事に書きました。
型は tsc で別に調べる
npx tsx も node も、型を調べません。型の誤りのあるファイル c.ts でも、止まらずに動きます。
const n: number = "not a number";
console.log(n);
$ npx tsx c.ts
not a number
$ node c.ts
not a number
型は tsc で別に調べます。次は、tsconfig.json の無いフォルダーで流した出力です。
$ npx tsc --noEmit c.ts
c.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.
tsconfig.json があるフォルダーでファイル名を渡すと、TypeScript 6.0 以降は TS5112(これも TypeScript がエラーごとに付けている番号)で止まります。そのときはファイル名を渡さずに、npx tsc --noEmit で調べます。TS5112 の出方は、jsx-flag-error の記事に書きました。
ts-node を使い続けるには? TypeScript 6 系と並べて入れる
結果を先に書きます。手元で ts-node が型を調べて動いた(Hello, tsx と出て、型の誤りも TS2322 で止めた)のは、"type": "commonjs" のフォルダーに、次の 6 系と 7 系を並べて入れ、tsconfig.json に "module": "commonjs" を書いたときだけでした。理由は確かめていません。
手元で流した入れ方は、次の 1 行です。TypeScript の公式の告知にある、互換のパッケージ @typescript/typescript6 を typescript の名前で入れ、7.0 の tsc も別の名前で入れる形です。
$ npm install -D --no-audit --no-fund typescript@npm:@typescript/typescript6@^6.0.2 @typescript/native@npm:typescript@^7.0.2 ts-node@10.9.2 @types/node@24
package.json の devDependencies には、告知が案内する次の 2 行が入ります(ts-node と @types/node の行は略します)。npx tsc は 7.0 になり、6.0 は tsc6 で使えます。告知は、typescript を呼び出す道具が 6.0 の API を使い続けるための入れ方として書いていて、ts-node の名前は挙げていません。
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
typescript@npm:@typescript/typescript6 だけを入れると、使えるコマンドは tsc6 だけになります。並べ入れたフォルダーでは、コマンドの版は次のように出ました(tsc6 は、npm の版が 6.0.2 のパッケージですが、Version 6.0.3 と出ます。この理由は確かめていません)。
$ npx tsc --version
Version 7.0.2
$ npx tsc6 --version
Version 6.0.3
並べ入れの手順の説明は、TypeScript 7 の記事の手順 6 にあります。以下は、手元で ts-node を動かした結果で、公式の文書の記述ではありません。
npm init -y(npm 11.19.1)が作る package.json は、"type": "commonjs" です。この "type": "commonjs" のフォルダーで、並べ入れ(ts-node 10.9.2)にして、tsconfig.json が無いと、ts-node は何も表示せずに終わりました(エラーも出ず、終了コードは 0 でした)。TypeScript 6.0.3 だけを入れたときも同じです。
$ npx ts-node a.ts
出力の行は、何もありません。tsconfig.json に "module": "commonjs" を書くと、Hello, tsx と出て、型の誤りのある c.ts は TS2322 で止まりました。型を調べて動いたと分かる結果です。
{ "compilerOptions": { "module": "commonjs" } }
次の出力は、ts-node のソースの行とスタックを略したものです。
$ npx ts-node a.ts
Hello, tsx
$ npx ts-node c.ts
TSError: ⨯ Unable to compile TypeScript:
c.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.
$ npx tsc --noEmit
c.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.
tsconfig.json が無いと何も表示しない理由と、"module": "commonjs" で動く理由は、確かめていません。「6.0 に戻せば直る」とだけは書けません。TypeScript 6.0.3 に戻すだけで動くかは、下の「よくある質問」にまとめました。
"type": "module" のプロジェクトでは(ERR_UNKNOWN_FILE_EXTENSION も)
package.json を "type": "module" にしたフォルダーでは、結果が分かれました。並べ入れ(tsconfig.json は "module": "nodenext")でも、TypeScript 6.0.3 だけでも(tsconfig.json なし)、Hello, tsx と出て動きました(Hello, tsx は、a.ts が出す文字です)。ただし、型の誤りのある c.ts も止まらずに動きました。ts-node が型を調べた様子は、出力にありません。
$ npx ts-node a.ts
Hello, tsx
$ npx ts-node c.ts
not a number
ts-node の README が案内する ESM の形(tsconfig.json に "module": "ESNext" と "ts-node": {"esm": true})や、npx ts-node --esm・npx ts-node-esm でも、a.ts は Hello, tsx と出て動きました。型の誤りのある c.ts を流した npx ts-node --esm c.ts も、止まりませんでした。これらでは、DEP0180 という警告の行が出ます。fs.Stats の作り方が非推奨になった、という Node.js の警告で、ts-node のどこから出るかは確かめていません。ESM と CommonJS の違いは、ESM と CommonJS の記事にあります。
$ npx ts-node --esm c.ts
not a number
ERR_UNKNOWN_FILE_EXTENSION は、Node.js 24.22.1 の既定では出ませんでした。Node.js の型の取り除きを止める NODE_OPTIONS=--no-strip-types を付けたときに出ました。README が ERR_UNKNOWN_FILE_EXTENSION の直し方として挙げる --esm の形でも、--no-strip-types を付けると、同じエラーは消えませんでした。次の出力は、スタックと、最後の } の行を略したものです。
$ env NODE_OPTIONS=--no-strip-types npx ts-node a.ts
TypeError: Unknown file extension ".ts" for …/a.ts
code: 'ERR_UNKNOWN_FILE_EXTENSION'
$ env NODE_OPTIONS=--no-strip-types npx ts-node --esm a.ts
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for …/a.ts
code: 'ERR_UNKNOWN_FILE_EXTENSION'
動いた理由は、確かめていません。Node.js 22.17.0 以前で ts-node を動かした結果は、流していません。なお、npx tsx a.ts は、Node.js 20.19.0・22.17.0・24.13.0 のどれでも動きました。README は、ESM の対応は Node.js の新しい版で壊れうるので、本番には勧めない、と書いています。
どれを選べばいい?
Node.js の文書は、全部の機能が要るなら外のパッケージ(例に tsx)、軽く動かすだけなら組み込みの型の取り除き、と書いています。手元の結果から、目的ごとに並べます。tsx・ts-node・node のくらべは、npx tsx の記事の表にまとめました。
- すぐ動かしたい →
npx tsx a.ts(TypeScript 7.0.2 を入れたままで動きました) - Node.js が新しい版(上で書いた版)で、
enumなどを使っていない →node a.ts - 動かすときに型も調べたい → 6 系と 7 系の並べ入れ。手元で動いたのは、
"type": "commonjs"と"module": "commonjs"のときだけです - tsx と node で動かすときの型の調べ方 →
npx tsc --noEmitを別に流す
よくある質問
ts-node は TypeScript 7 に対応しますか?
分かっているのは、日付と状態だけです。ts-node の最後の版は 2023年12月8日の 10.9.2 で、issue #2174 は 2026年10月23日時点で開いたままです。リポジトリの人のコメントは、issue にありません。今後の対応については、公式の告知を見つけていません。
TypeScript を 6.0.3 に戻すだけで動きますか?
条件によります。"type": "commonjs" のフォルダーでは、tsconfig.json が無いと、ts-node は何も表示せずに終わりました。tsconfig.json に "module": "commonjs" を書くと、動いて、型の誤りも止めました(これは 6 系と 7 系を並べて入れたフォルダーでの結果です。6.0.3 だけで "module": "commonjs" を書いた形は流していません)。"type": "module" のフォルダーでは、Hello, tsx と出ても、型の誤りでは止まりませんでした。issue #2174 には、6.0.3 に戻して直した、という報告があります(その人の設定は分かりません)。
package.json の scripts の ts-node は、どう書き換えますか?
tsx の文書は、npm install -D tsx で入れ、scripts では npx なしで tsx ./file.ts と書く、と案内しています。たとえば "start": "ts-node ./file.ts" なら、"start": "tsx ./file.ts" になります。tsx は型を調べないので、型は tsc --noEmit を別の scripts に入れて調べます。
まとめ
- ts-node 10.9.2 は、TypeScript 7.0.2 で
TypeError: Cannot read properties of undefined (reading 'fileExists')で止まります。tsconfig.json の有無によりません - 公式の告知は「TypeScript 7.0 には API が無い」と書いていますが、ts-node が止まる理由を書いた公式の文は見つかっていません。この記事は、2 つを並べて書いただけです
- 直し方は、
npx tsx a.tsか、Node.js の新しい版のnode a.tsに替えることです。どちらも型を調べないので、型はnpx tsc --noEmitで別に調べます - ts-node を使い続けるなら、TypeScript 6 系との並べ入れがあります。手元で型を調べて動いたのは、
"type": "commonjs"のフォルダーに並べ入れて"module": "commonjs"を書いたときだけです。"type": "module"では、Hello, tsxと出ても型の誤りで止まりませんでした - ts-node の最後の版は 10.9.2(2023年12月8日)で、issue #2174 は 2026年10月23日時点で開いたままです
この記事で確かめていないことは、次のとおりです。
- ts-node が止まる理由、tsconfig.json が無いと何も表示されない理由、
"module": "commonjs"で動く理由、"type": "module"でHello, tsxと出ても型の誤りで止まらない理由、tsc6が 6.0.3 と表示する理由 - Node.js 22.17.0 以前での ts-node の動き
- Windows と macOS での動き
- TypeScript 7.1 のベータでは確かめていません。ts-node のベータの版と Node.js 26 でも確かめていません
参考資料
- TypeStrong/ts-node(GitHub。README)
- ts-node の Issue #2174(ts-node doesn't work with Typescript 7.0.2)
- ts-node v10.9.2 のリリース
- Announcing TypeScript 7.0(公式ブログ。6.0 と並べて使う節)
- Node.js の文書: TypeScript
- tsx の文書: はじめに
- tsx の文書: TypeScript
※この記事は、2026年10月23日時点の公式の資料と照らして確かめています。誤りに気づいたらお問い合わせからお知らせください。



