TypeScript - 运行 TS 代码的5种方式详解(搭建 TS 运行环境)
作者:hangge | 2026-07-29 09:12
TypeScript 是 JavaScript 的超集,添加了静态类型检查等特性。但由于浏览器和 Node.js 无法直接运行 TypeScript 代码,我们需要先将其编译为 JavaScript。本文将介绍几种常见的运行 TypeScript 代码的方式,包括使用 tsc 编译器、ts-node、tsx、Bun 以及通过 webpack 搭建开发环境,帮助大家快速上手 TypeScript 开发。




(2)对于新项目,建议优先使用 tsx 而非 ts-node。tsx 的定位是开发阶段的运行器,生产环境建议使用 tsc 或 tsup 编译后再运行。


一、基本介绍
1,为什么 TypeScript 需要编译
(1)TypeScript 是一种静态类型的编程语言,它在 JavaScript 的基础上增加了类型系统。但浏览器和 Node.js 运行时只能执行 JavaScript 代码,因此需要将 TypeScript 代码编译(或称转译)成 JavaScript 代码才能运行。
(2)整个编译流程如下图所示:
提示:TypeScript 编译器(tsc)不仅负责将 TS 转换为 JS,还会在编译过程中进行类型检查,帮助我们在开发阶段发现潜在的类型错误。

2,运行 TypeScript 的几种方式
(1)根据不同的使用场景,我们可以选择以下几种方式来运行 TypeScript 代码:
- 方式一:使用 tsc 手动编译后运行 —— 适合学习、简单脚本
- 方式二:使用 ts-node 直接运行 —— 适合 Node.js 环境下的开发调试
- 方式三:使用 tsx 直接运行 —— 推荐,速度更快,ESM 支持更好
- 方式四:使用 Bun 直接运行 —— 原生支持 TypeScript,无需额外配置
- 方式五:使用 webpack/Vite 等构建工具 —— 适合前端项目开发
(2)下面是各个方式的比较:
| 方式 | 适用场景 | 特点 |
|---|---|---|
| tsc | 学习、简单脚本 | 手动编译,步骤较多 |
| ts-node | Node.js 开发调试 | 直接运行,但启动较慢 |
| tsx | Node.js 开发调试 | 推荐,启动快,ESM 支持好 |
| Bun | 通用开发 | 原生支持,零配置 |
| webpack/Vite | 前端项目 | 热更新,完整开发环境 |
二、使用 tsc 手动编译后运行
1,全局安装 TypeScript
(1)首先确保已安装 Node.js 环境。然后在终端执行以下命令全局安装 TypeScript:
提示:建议使用 npm 全局安装,这样可以在任意目录使用 tsc 命令。如果想安装特定版本,可以指定版本号如 typescript@5.3.0。
# 全局安装最新版本的 TypeScript npm install -g typescript # 或安装指定版本 npm install -g typescript@5.3.0
(2)安装完成后,可以使用以下命令验证安装是否成功:
# 查看 tsc 版本 tsc --version # 或使用简写 tsc -v
(3)如果看到类似 Version 6.x.x 的输出,说明安装成功。

2,使用 tsc 编译 TypeScript 代码
(1)创建一个简单的 TypeScript 文件 math.ts:
function sum(num1: number, num2: number): number {
return num1 + num2;
}
console.log(sum(10, 20));
(2)在终端中执行如下编译命令:
tsc math.ts
(3)编译成功后,会在同目录下生成 math.js 文件。

(4)我们可以查看编译后的 JavaScript 代码。可以看到,TypeScript 中的类型注解(如 : number)在编译后被移除了。
// math.js - 编译后生成的 JavaScript 代码
function sum(num1, num2) {
return num1 + num2;
}
console.log(sum(10, 20));
(5)现在可以使用 Node.js 运行编译后的文件,并查看输出结果。
node math.js

3,创建 tsconfig.json 配置文件
(1)对于稍大的项目,我们可以使用 tsconfig.json 文件来管理编译选项。执行以下命令可以快速生成配置文件 tsconfig.json。
tsc --init
(2)生成的 tsconfig.json 文件包含所有可用的配置选项(默认被注释)。以下是一个常用的基础配置:
提示:配置好 tsconfig.json 后,直接执行 tsc 命令(不指定文件名)即可编译整个项目。编译器会根据配置文件中的 include 和 exclude 来确定要编译的文件。
{
"compilerOptions": {
"target": "ES2020", // 编译目标版本
"module": "commonjs", // 模块系统
"strict": true, // 启用严格模式
"esModuleInterop": true, // 支持 ES 模块导入
"skipLibCheck": true, // 跳过库类型检查
"outDir": "./dist", // 输出目录
"rootDir": "./src" // 源代码目录
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
三、使用 ts-node 运行 TS 代码
1,安装 ts-node
(1)ts-node 是一个 TypeScript 执行环境,它允许我们直接运行 TypeScript 代码,无需手动编译。首先全局安装 ts-node:
提示:ts-node 需要依赖 tslib 和 @types/node 两个包,建议一并安装。
# 全局安装 ts-node npm install -g ts-node # 安装依赖包 npm install -g tslib @types/node
(2)或者作为项目的开发依赖安装:
npm install -D ts-node tslib @types/node
2,运行 TypeScript 文件
(1)创建一个 TypeScript 文件 main.ts:
function greet(name: string): void {
console.log(`Hello, ${name}!`);
}
greet("TypeScript");
(2)使用 ts-node 直接运行:
ts-node main.ts

(3)如果是作为项目开发依赖安装的,可以使用 npx 运行:
npx ts-node main.ts
四、使用 tsx 运行 TS 代码(推荐)
1,tsx 介绍
(1)tsx 是新一代的 TypeScript 运行器,相比 ts-node 有以下优势:
- 启动更快:基于 esbuild 进行转译,启动速度约 50ms,比 ts-node 快很多
- ESM 支持更好:完整支持 ES Modules,无需额外配置
- 兼容性强:可作为 ts-node 的直接替代品,支持 Node.js 18+
- 活跃维护:2024-2026 年已成为 Node.js 项目的默认 TypeScript 运行器
2,安装并使用 tsx
(1)安装 tsx:
# 全局安装 npm install -g tsx # 或作为开发依赖 npm install -D tsx
(2)直接运行 TypeScript 文件:
# 使用 tsx 运行 TypeScript 文件 tsx main.ts # 或使用 npx npx tsx main.ts

(3)tsx 还支持监视模式。下面命令将采用监视模式运行(文件变化自动重新运行)。
tsx watch main.ts
(4)如果需要通过 Node.js 原生方式使用 tsx,可以注册为加载器(通过 Node.js 的 --import 参数注册 tsx)
node --import=tsx main.ts
五、使用 Bun 运行 TS 代码
1,Bun 简介
(1)Bun 是一个现代化的 JavaScript 运行时,它原生支持 TypeScript,无需任何配置即可直接运行 .ts 文件。
(2)Bun 的优势包括:
- 原生 TypeScript 支持:零配置即可运行 TS 文件
- 极致性能:启动速度和运行速度都非常快
- 内置工具链:包管理器、测试框架、打包器一体化
- 兼容 Node.js:支持大部分 Node.js API
2,安装并使用 Bun
(1)安装 Bun(以 macOS/Linux 为例):
# 使用 curl 安装 curl -fsSL https://bun.sh/install | bash # 或使用 npm 安装 npm install -g bun
(2)安装完成后,可以直接运行 TypeScript 文件:
# 使用 bun 运行 TypeScript 文件 bun run main.ts # 或简写 bun main.ts

(3)Bun 也支持在 package.json 中定义脚本:
提示:Bun 内置的 TypeScript 转译器不会进行类型检查。如果需要类型检查,可以运行 bun tsc --noEmit 命令。
{
"name": "my-project",
"scripts": {
"start": "bun run main.ts",
"dev": "bun --watch main.ts"
}
}
- 然后执行如下命令运行脚本:
bun start
- 执行如下命令则采用监视模式运行:
bun dev
六、使用 Vue CLI 搭建 TS 运行环境
1,创建 Vue3 + TypeScript 项目
(1)如果需要在浏览器中运行 TypeScript 代码,可以使用 Vue CLI 或 Vite 搭建开发环境。下面以 Vue CLI 为例:
# 创建新项目 vue create my-typescript-project
(2)在交互界面中选择:
- 选择 Manually select features(手动选择功能)
- 勾选 TypeScript 选项
- 选择 Vue 3 版本
(3)项目创建完成后,目录结构如下:
my-typescript-project/ ├── public/ │ └── index.html ├── src/ │ ├── App.vue # 根组件 │ ├── main.ts # 入口文件 │ └── shims-vue.d.ts # Vue 文件类型声明 ├── tsconfig.json # TypeScript 配置 └── package.json
2,项目文件说明
(1)入口文件 main.ts:
// main.ts - 项目入口文件
import { createApp } from 'vue';
import App from './App.vue';
createApp(App).mount('#app');
(2)根组件 App.vue(使用 lang="ts" 声明 TypeScript):
<template>
<div>Hello TypeScript</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
name: 'App'
});
</script>
(3)运行开发服务器:
# 进入项目目录 cd my-typescript-project # 运行开发服务器 npm run serve # 或使用 Vite 创建的项目 npm run dev
附、tsconfig.json 常用配置详解
1,核心配置项说明
(1)tsconfig.json 是 TypeScript 项目的核心配置文件,以下是常用配置项的详细说明。
(2)编译目标与模块相关配置:
{
"compilerOptions": {
// target: 指定编译后的 JavaScript 版本
// 常用值: "ES5", "ES6", "ES2020", "ESNext"
"target": "ES2020",
// module: 指定生成代码的模块系统
// 常用值: "commonjs", "es6", "esnext", "nodenext"
"module": "commonjs",
// lib: 指定运行时可用的 API(通常根据 target 自动推断)
"lib": ["ES2020", "DOM"]
}
}
(3)类型检查相关配置:
{
"compilerOptions": {
// strict: 启用所有严格类型检查选项(推荐开启)
"strict": true,
// noImplicitAny: 禁止隐式 any 类型
"noImplicitAny": true,
// strictNullChecks: 严格检查 null 和 undefined
"strictNullChecks": true
}
}
(4)模块解析相关配置:
{
"compilerOptions": {
// esModuleInterop: 允许 CommonJS 和 ES Module 互操作
"esModuleInterop": true,
// moduleResolution: 模块解析策略
// "node" 适用于 Node.js,"classic" 是旧策略
"moduleResolution": "node",
// baseUrl: 模块解析的基础路径
"baseUrl": ".",
// paths: 路径别名映射(类似 webpack alias)
"paths": {
"@/*": ["src/*"]
}
}
}
(5)输出相关配置:
{
"compilerOptions": {
// outDir: 编译输出目录
"outDir": "./dist",
// rootDir: 源代码根目录
"rootDir": "./src",
// sourceMap: 是否生成 sourceMap 文件
"sourceMap": true,
// declaration: 是否生成 .d.ts 类型声明文件
"declaration": true
}
}
2,推荐的配置模板
(1)Node.js 项目推荐配置:
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"outDir": "./dist",
"rootDir": "./src",
"sourceMap": true
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
(2)前端项目(配合 Vite/webpack)推荐配置:
提示:noEmit: true 表示不输出编译文件,由 Vite/webpack 等构建工具负责打包。这样可以避免 TypeScript 编译器与构建工具重复工作。
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"jsx": "preserve",
"esModuleInterop": true,
"skipLibCheck": true,
"noEmit": true,
"lib": ["ESNext", "DOM", "DOM.Iterable"],
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src/**/*.ts", "src/**/*.vue"],
"exclude": ["node_modules"]
}
全部评论(0)