很多人刚开始接触 TypeScript 的时候,都会遇到一个实际问题:写好的 .ts 文件能不能像 .js 那样直接在浏览器或者 Node.js 里运行?答案是——不能。
TypeScript 不是“能跑”的语言
TypeScript 本质上是一种“增强版的 JavaScript”,它给 JS 加上了类型系统、接口、类装饰器等特性,但这些语法浏览器和 Node.js 并不认识。也就是说,TypeScript 必须先“翻译”成 JavaScript 才能执行。
这就像你用高级文言文写了一篇文章,别人看不懂,得先转成白话文才能读。TypeScript 就是那个文言文,JavaScript 就是白话文。
需要编译这一步
TypeScript 官方提供了编译工具 tsc。你写完代码后,得运行命令:
npx tsc index.ts
它会生成一个同名的 index.js 文件,这时候你才能用 node index.js 去运行,或者在 HTML 中引入这个 JS 文件。
开发时怎么“假装”直接运行
虽然不能直接运行,但开发中我们常感觉“好像可以直接跑”,那是因为用了工具链。比如:
- ts-node:允许你在 Node.js 环境下直接运行 .ts 文件,适合写脚本或后端服务调试。
- Vite、Webpack:前端项目中,它们会在启动开发服务器时自动编译 TS,并实时更新。
比如用 ts-node 运行:
npx ts-node app.ts
看起来是直接跑了 TypeScript,其实背后它悄悄完成了编译到内存这一步。
路由设置中的实际场景
假设你在用 Express 写一个后端项目,路由文件用了 TypeScript:
import express from 'express';
const router = express.Router();
router.get('/users/:id', (req, res) => {
const id: number = parseInt(req.params.id);
res.json({ userId: id });
});
export default router;
这个文件不能直接被 Node 加载。你得先用 tsc 编译成 JS,然后在主文件中引用编译后的版本,否则就会报错“无法加载模块”。
所以,在部署前一定要确保编译流程走通,别等到上线才发现路由 404——不是代码写错了,而是根本没生成对应的 JS 文件。
小建议:别跳过编译检查
有些人为了图快,直接在支持 TS 的框架里写代码,以为类型错误没关系,反正能跑。但一旦脱离开发环境,比如放到生产服务器上,缺少编译步骤就可能直接崩溃。养成习惯:本地先手动跑一遍 tsc --noEmit 检查类型,再正式编译。