TypeScript .ts 文件无法运行?解决“未知文件扩展名”错误

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:“您的 .ts 文件打不开?您并不孤单”

\n\n

想象一下:您正在编写一段很酷的 TypeScript 代码,将文件保存为 .ts 扩展名,然后运行命令 node myfile.ts……却得到类似这样的回复:“Unknown file extension ".ts"”。熟悉吗?如果您浏览过 Stack Overflow,就会知道这个问题已经积累了数千次浏览和数百条评论。这个问题虽然古老,但至今仍然存在。

\n\n

在本文中,我们不仅仅是复制论坛上的答案。我们将深入分析为什么会发生这种情况,如何修复它,以及应该怎么做才能永远不再遇到这个错误。您将学习如何正确配置 TypeScript 项目,使用 ts-node 和 tsconfig.json 配置。我们开始吧!

\n\n

为什么会出现“未知文件扩展名 ".ts"”错误?

\n\n

让我们直接切入正题。Node.js 默认情况下无法识别 .ts 文件。它只认识 .js、.json、.mjs 和 .cjs。当您输入 node myfile.ts 时,Node.js 会诚实地尝试将 TypeScript 代码作为普通 JavaScript 执行,但会遇到它不熟悉的语法(例如类型、接口、泛型)。

\n\n

结果就是——错误。但还有另一种情况:您使用了 ts-node 或 tsx,但仍然看到相同的消息。为什么?因为在现代版本的 Node.js(从第 16 版开始)中,对 package.json 中的扩展名添加了严格检查,特别是当设置了 "type": "module" 时。

\n\n

主要原因:

\n
    \n
  • 直接运行 node file.ts — Node.js 无法即时编译 TypeScript。
  • \n
  • 缺少 ts-node 或 tsx — 没有用于转译的工具。
  • \n
  • tsconfig.json 配置错误 — 例如,未指定模块或目标。
  • \n
  • package.json 问题 — 如果设置了 "type": "module",则 ts-node 可能需要显式指定扩展名。
  • \n
\n\n

解决方案 1:使用 ts-node(经典方法)

\n\n

在不预先编译的情况下运行 TypeScript 的最简单方法是使用 ts-node。这个包会将 .ts 文件编译到内存中,并将结果传递给 Node.js。

\n\n

安装与运行

\n
npm install -g ts-node\nts-node myfile.ts
\n\n

如果您使用本地项目,最好将其安装为开发依赖项:

\n
npm install --save-dev ts-node\nnpx ts-node myfile.ts
\n\n

一个简单的 hello.ts 文件示例:

\n
const greet = (name: string): string => {\n    return `你好,${name}!`;\n};\n\nconsole.log(greet("世界"));
\n\n

运行:npx ts-node hello.ts — 您会在控制台中看到 "你好,世界!"。成功了!

\n\n

但有一个问题:"type": "module"

\n

如果您的 package.json 中指定了 "type": "module",那么 ts-node 可能会拒绝工作。在这种情况下,您需要暂时删除这一行,或者使用 --esm 标志:

\n
npx ts-node --esm myfile.ts
\n\n

解决方案 2:使用 tsx(现代工具)

\n\n

tsx 是 ts-node 的更快的替代方案,基于 esbuild。它开箱即用地支持 ESM,并且不需要额外的标志。

\n\n

安装:

\n
npm install --save-dev tsx
\n\n

运行:

\n
npx tsx myfile.ts
\n\n

使用现代 TypeScript 功能的示例:

\n
// types.ts\nexport interface User {\n    id: number;\n    name: string;\n    email: string;\n}\n\nconst user                

博客

书籍推荐