这些命令主要是用来创建 TypeScript 项目、安装依赖、编译代码、运行程序的。
你可以把整个过程理解为:

下面逐个解释。
一、初始化项目
1. npm init -y
csharp
npm init -y
拆开理解:
| 部分 | 含义 |
|---|---|
npm |
Node.js 的包管理工具 |
init |
初始化一个项目 |
-y |
所有初始化问题自动选择默认答案 |
执行后,当前目录会生成一个 package.json 文件。
例如:
bash
{
"name": "typescript-demo",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
}
}
package.json 是什么?
你可以把它理解成项目的管理文件,用于描述:
- 项目名称、版本
- 安装了哪些依赖
- 可以运行哪些脚本命令
- 项目采用什么模块系统
2. npm install --save-dev typescript
css
npm install --save-dev typescript
表示:在当前项目中安装 TypeScript 编译器。
其中:
npm install:安装 npm 包。--save-dev:将依赖记录到开发依赖中。typescript:要安装的包名。
--save-dev 也可以简写成 -D:
npm install -D typescript
执行后,package.json 中会增加:
json
{
"devDependencies": {
"typescript": "^5.9.3"
}
}
版本号仅为示例,实际安装的是 npm 解析到的版本。
同时会生成:
csharp
node_modules/
package-lock.json
node_modules:安装下来的依赖文件。package-lock.json:记录依赖的具体版本和依赖关系。
3. npm install --save-dev @types/node
bash
npm install -D @types/node
表示:安装 Node.js API 的 TypeScript 类型定义。
举个例子:
arduino
console.log(process.version);
这里的 process 是 Node.js 提供的全局对象。
但 TypeScript 需要知道:
process是什么类型?process.version是什么类型?process.env有哪些属性?
@types/node 就是用来提供这些类型信息的。
注意:它不是安装 Node.js 本身,也不会提供 Node.js 的运行时功能。
4. npx tsc --init
csharp
npx tsc --init
拆开看:
| 部分 | 含义 |
|---|---|
npx |
执行 npm 包提供的命令,优先使用本地安装的版本 |
tsc |
TypeScript Compiler,TypeScript 编译器 |
--init |
初始化 TypeScript 配置文件 |
运行后会生成:
tsconfig.json
例如可以配置:
json
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"rootDir": "./src",
"outDir": "./dist",
"strict": true
},
"include": ["src"]
}
这些配置的含义:
| 配置 | 作用 |
|---|---|
target |
指定编译输出的 JavaScript 语言版本 |
module |
指定模块代码的生成和处理方式 |
moduleResolution |
指定如何解析导入的模块 |
rootDir |
TypeScript 源文件根目录 |
outDir |
JavaScript 输出目录 |
strict |
开启严格类型检查 |
二、编译 TypeScript
TypeScript 主要提供编译时类型检查,普通 .ts 文件通常需要编译或由支持 TypeScript 的运行工具处理。
例如:
c
// src/index.ts
const name: string = "张三";
console.log(name);
编译后会变成 JavaScript:
ini
// dist/index.js
const name = "张三";
console.log(name);
你会发现,: string 消失了。
因为 TypeScript 类型信息通常不会存在于运行时。
1. npx tsc:一次性编译
npx tsc
执行后,TypeScript 编译器会读取 tsconfig.json,检查代码并按照配置生成 JavaScript 文件。
2. npm run build:执行自定义脚本
arduino
npm run build
这里有个非常重要的知识点:
npm run build 并不是 npm 自带的 TypeScript 编译命令。
它的含义是:找到 package.json 的 scripts.build 并执行。
例如:
json
{
"scripts": {
"build": "tsc"
}
}
这时候:
arduino
npm run build
基本等价于:
npx tsc
如果没有配置 build 脚本,就会提示:
go
npm error Missing script: "build"
3. npm run build:watch:监听编译
假设:
json
{
"scripts": {
"build": "tsc",
"build:watch": "tsc --watch"
}
}
执行:
arduino
npm run build:watch
等价于:
css
npx tsc --watch
它会持续监听 TypeScript 文件变化。
例如:
bash
修改 src/index.ts
↓
TypeScript 检测到变化
↓
自动重新编译
↓
更新 dist/index.js
注意:tsc --watch 负责自动编译,不会自动重新启动你的 Node.js 程序。
4. npm run type-check:只检查类型
假设配置:
json
{
"scripts": {
"type-check": "tsc --noEmit"
}
}
执行:
arduino
npm run type-check
等价于:
css
npx tsc --noEmit
其中 --noEmit 表示:
只进行 TypeScript 类型检查,不输出 JavaScript 文件。
例如:
ini
const age: number = "hello";
TypeScript 会报错:
python
Type 'string' is not assignable to type 'number'.
但是不会生成 JS 文件。
三、运行 TypeScript 代码
1. npm start
sql
npm start
也是执行 package.json 中的脚本。
例如:
json
{
"scripts": {
"start": "node dist/index.js"
}
}
执行:
sql
npm start
等价于:
bash
node dist/index.js
这里的 node 是 Node.js 的运行命令。
所以:
tsc:编译 TypeScript。node:执行 JavaScript。
2. npm install -D ts-node
css
npm install --save-dev ts-node
安装 ts-node 工具。
它能够在执行时处理 TypeScript,省去手动先运行 tsc 的步骤。
例如:
bash
npx ts-node src/index.ts
对于兼容的项目配置,可以直接执行 TypeScript 源文件。
不过在原生 ESM 项目中,ts-node 需要额外的加载器配置,直接执行未必成功。初学阶段可以先使用普通编译流程,或者用下面介绍的 tsx。
3. npm install -g ts-node
npm install -g ts-node
其中:
-g:global,全局安装。ts-node:要安装的工具。
安装后通常可以直接在终端执行:
bash
ts-node src/index.ts
本地安装与全局安装对比:
| 对比 | 本地安装 -D |
全局安装 -g |
|---|---|---|
| 安装位置 | 当前项目 | 全局 npm 环境 |
| 是否记录在项目依赖 | ✅ | ❌ |
| 是否方便团队统一版本 | ✅ | ❌ |
| 常用执行方式 | npx ts-node |
ts-node |
| 推荐用途 | 正式开发项目 | 个人临时工具 |
更推荐在项目中本地安装。
四、现在更推荐的 TypeScript 开发方式:tsx
对于初学 TypeScript 的 Node.js 项目,我更推荐使用 tsx。
它可以直接执行 TypeScript 文件,而且支持常见的 ESM 场景。
安装:
npm install -D tsx
运行:
bash
npx tsx src/index.ts
监听文件变化并重新运行:
bash
npx tsx watch src/index.ts
注意:tsx 主要负责执行代码,不会像 tsc 那样进行完整的 TypeScript 类型检查,因此实际开发通常会同时使用 tsx 和 tsc --noEmit。
五、从零创建一个完整 TypeScript 项目
下面这套命令你可以直接复制到终端执行。
第一步:创建项目
bash
mkdir ts-demo
cd ts-demo
npm init -y
第二步:安装依赖
bash
npm install -D typescript @types/node tsx
第三步:生成配置
csharp
npx tsc --init
可以把生成的 tsconfig.json 调整为:
json
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"rootDir": "./src",
"outDir": "./dist",
"strict": true
},
"include": ["src"]
}
然后在 package.json 中添加:
json
{
"type": "module"
}
这里的 "type": "module" 是为了让 Node.js 将该包中的普通 .js 文件按 ES Module 处理。
第四步:创建 TypeScript 文件
bash
mkdir src
touch src/index.ts
写入:
typescript
interface User {
id: number;
name: string;
}
function getUser(id: number): User {
return {
id,
name: "张三"
};
}
const user = getUser(1001);
console.log(user);
第五步:添加 npm scripts
在 package.json 的 scripts 中配置:
json
{
"scripts": {
"build": "tsc",
"build:watch": "tsc --watch",
"type-check": "tsc --noEmit",
"start": "node dist/index.js",
"dev": "tsx watch src/index.ts"
}
}
这是一个很常见的开发配置。
第六步:执行
开发阶段:
arduino
npm run dev
只检查类型:
arduino
npm run type-check
编译:
arduino
npm run build
运行编译后的代码:
sql
npm start
最终项目结构:
go
ts-demo/
├── node_modules/
├── src/
│ └── index.ts
├── dist/
│ └── index.js
├── package.json
├── package-lock.json
└── tsconfig.json
六、所有命令总结
| 命令 | 作用 |
|---|---|
npm init -y |
初始化 npm 项目 |
npm install -D typescript |
安装 TypeScript 编译器 |
npm install -D @types/node |
安装 Node.js 类型定义 |
npx tsc --init |
生成 tsconfig.json |
npx tsc |
编译 TypeScript |
npx tsc --watch |
监听并自动编译 |
npx tsc --noEmit |
只检查类型 |
npm run build |
执行 build 脚本 |
npm start |
执行 start 脚本 |
npm install -D ts-node |
本地安装 ts-node |
npm install -g ts-node |
全局安装 ts-node |
npx ts-node src/index.ts |
通过 ts-node 执行 TS |
npx tsx src/index.ts |
通过 tsx 执行 TS |
npm run dev |
执行 dev 脚本 |
七、最重要的是理解 npm、npx、node、tsc 的区别
| 命令 | 一句话理解 |
|---|---|
npm |
管理项目依赖、执行项目脚本 |
npx |
执行 npm 包提供的命令 |
node |
运行 JavaScript |
tsc |
检查并编译 TypeScript |
ts-node |
在执行时处理 TypeScript |
tsx |
更方便地执行 TypeScript,支持常见 ESM 开发场景 |
尤其要分清下面三个命令:
bash
# 编译 TS,生成 JS
npx tsc
# 运行 JS
node dist/index.js
# 直接开发运行 TS
npx tsx src/index.ts
我的建议:刚开始学习 TypeScript,先掌握 npm init、npm install、npx tsc、npm run、node 这五个命令。 等你理解了 TypeScript 如何编译成 JavaScript,再使用 tsx 提升开发效率。