1. tsconfig.json 进阶
超越基础配置,掌握影响项目结构和编译行为的关键选项。
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"lib": ["ES2022"],
"outDir": "dist",
"rootDir": "src",
"strict": true,
"incremental": true,
"tsBuildInfoFile": "./dist/.tsbuildinfo",
"paths": {
"@/*": ["./src/*"],
"@utils/*": ["./src/utils/*"]
},
"baseUrl": ".",
"exactOptionalPropertyTypes": true,
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
paths 路径别名
用 @/utils/... 替代 ../../../utils/...
incremental 增量编译
缓存编译信息,大项目再次编译速度提升 50%+
noUncheckedIndexedAccess
数组/对象索引访问返回 T | undefined,更安全
target vs lib
target 控制输出语法等级,lib 控制可用的类型声明
2. ESLint
ESLint 配合 typescript-eslint 可以在编码阶段捕获潜在问题。推荐使用 Flat Config 新格式。
npm install -D eslint @eslint/js typescript-eslint
// eslint.config.js
import eslint from "@eslint/js";
import tseslint from "typescript-eslint";
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommended,
{
rules: {
"@typescript-eslint/no-unused-vars": ["error", {
argsIgnorePattern: "^_",
}],
"@typescript-eslint/explicit-function-return-type": "warn",
"@typescript-eslint/no-explicit-any": "error",
"no-console": ["warn", { allow: ["warn", "error"] }],
},
},
{
ignores: ["dist/", "node_modules/"],
}
);
npx eslint . # 检查所有文件
npx eslint --fix . # 自动修复可修复的问题
3. Prettier
Prettier 负责代码格式化——统一风格,结束无谓的格式之争。
npm install -D prettier eslint-config-prettier
// .prettierrc
{
"semi": true,
"singleQuote": false,
"tabWidth": 4,
"trailingComma": "all",
"printWidth": 100,
"arrowParens": "always"
}
在 ESLint 配置中加入 eslint-config-prettier,关闭与 Prettier 冲突的规则:
// eslint.config.js 中追加
import prettier from "eslint-config-prettier";
export default tseslint.config(
// ...其他配置
prettier, // 放在最后,覆盖冲突规则
);
编辑器设置 Format on Save,即可在保存时自动格式化。
4. 构建工具对比
tsc
官方TypeScript 编译器。类型检查 + 转译。速度一般,但是唯一能做完整类型检查的工具。
推荐用途:CI 中做类型检查
esbuild
极快Go 编写,打包速度比 webpack 快 10-100 倍。不做类型检查,仅转译和打包。
推荐用途:库打包、快速构建
swc
RustRust 编写的转译器,速度接近 esbuild。Next.js 默认使用 swc。
推荐用途:替代 Babel 的快速转译
Vite
全能开发环境用原生 ESM 实现秒级热更新,生产环境用 Rollup 打包。
推荐用途:前端项目开发 + 构建
tsc --noEmit 做类型检查 + esbuild 或 Vite 做打包/运行。类似 Java 的"编译检查(javac)+ 构建工具(Maven/Gradle)"分离。
5. npm 包发布
发布 TypeScript 包时,需要同时提供编译后的 JS 和类型声明文件。
// package.json 关键字段
{
"name": "my-ts-lib",
"version": "1.0.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
".": {
"import": "./dist/index.mjs",
"require": "./dist/index.cjs",
"types": "./dist/index.d.ts"
}
},
"files": ["dist"],
"scripts": {
"build": "tsc",
"prepublishOnly": "npm run build"
}
}
npm login
npm publish # 发布到 npm registry
files 字段指定发布包含的文件,比 .npmignore 更直观——白名单优于黑名单。
6. Docker 部署
多阶段构建:第一阶段编译 TypeScript,第二阶段只保留运行时需要的 JS 文件,大幅减小镜像体积。
# Dockerfile
# ===== 构建阶段 =====
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY tsconfig.json ./
COPY src/ ./src/
RUN npm run build
# ===== 生产阶段 =====
FROM node:20-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=builder /app/dist ./dist
ENV NODE_ENV=production
EXPOSE 3000
USER node
CMD ["node", "dist/index.js"]
# 构建并运行
docker build -t my-ts-app .
docker run -p 3000:3000 --env-file .env my-ts-app
多阶段构建的好处
- 生产镜像不包含 TypeScript 源码和 devDependencies
- 镜像体积可从 ~800MB 降到 ~150MB
- 使用
USER node运行,避免以 root 身份执行
📝 本章要点 & 教程完结
tsconfig 决定项目质量
开启 strict + 额外严格选项,越早越好
ESLint + Prettier 黄金搭档
ESLint 管逻辑质量,Prettier 管格式统一
tsc 检查 + esbuild 打包
类型安全和构建速度兼得
Docker 多阶段构建
编译与运行分离,镜像精简安全
🎉
恭喜完成全部教程!
你已经掌握了 TypeScript 从基础语法到项目部署的完整知识链。
下一步学习建议:
- 用 TypeScript 实现一个完整的 REST API 项目
- 探索 NestJS 或 tRPC 等进阶框架
- 学习 TypeScript 高级类型体操(类型编程)
- 参与开源项目,阅读优秀的 TS 代码