《Go 后端开发者学 TypeScript:从零搭建与运行》

这些命令主要是用来创建 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 提升开发效率。

相关推荐
Penge6661 小时前
《Go 后端开发者学 TypeScript:keyof关键字》
javascript
Penge6662 小时前
《Go 后端开发者学 TypeScript:extends关键字》
javascript
张张123y2 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
Penge6667 小时前
《Go 后端开发者学 TypeScript:typescript 类型断言》
javascript
Penge6667 小时前
《Go 后端开发者学 TypeScript:Symbol》
javascript
三*一9 小时前
Mapbox‑GL JS 多边形折点编辑工具:实现原理、功能拆解与踩坑总结
开发语言·javascript·ecmascript
FungLeo10 小时前
成为全栈·基础补充·Node.js 运行时:事件循环与异步
javascript·node.js·事件循环·后端开发·异步编程·成为全栈
Penge66610 小时前
《Go 后端开发者学 TypeScript:类型别名》
javascript
Penge66618 小时前
《Go 后端开发者学 TypeScript:数组和元组》
javascript