一、TypeScript在Node.js中的核心价值
1.1 静态类型检测
function add(a: number, b: string) {
return a + b
}
1.2 工具链增强
npm install --save-dev typescript @types/node ts-node tsconfig.json
1.3 代码维护性提升
interface User {
id: number
name: string
email: string
}
function createUser(user: User) {
}
二、框架选型对比:Express vs Fastify
2.1 核心特性对比
维度 |
Express |
Fastify |
性能 |
每秒处理约5000请求 |
每秒处理约15000请求 |
代码侵入性 |
需要中间件链 |
单文件配置 |
社区支持 |
90万+ GitHub Star |
40万+ GitHub Star |
TypeScript支持 |
完整但需手动配置 |
内置TypeScript模板 |
2.2 性能测试数据
基准测试环境
16核CPU/32GB内存
1000并发请求
Express: 2.1s响应延迟
Fastify: 0.7s响应延迟
三、TypeScript框架实战配置
3.1 Express+TypeScript快速搭建
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"outDir": "./dist"
},
"include": ["src/**/*"]
}
import express from 'express';
import { User } from './models/user';
const app = express();
app.get('/users', (req: Request, res: Response) => {
res.json({ users: User.find() });
});
app.listen(3000);
3.2 Fastify+TypeScript配置
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"types": ["node", "fastify"]
}
}
import fastify from 'fastify';
const app = fastify();
app.get<{
Querystring: { id: number }
}>('/users', async (req, res) => {
const user = await User.findById(req.query.id);
return user;
});
app.listen({ port: 3000 });
四、核心功能对比实战
4.1 路由系统对比
app.get('/api/users', (req, res) => {
res.send(users);
});
@Route('/api/users')
export class UserController {
@Get()
async getAll() {
return User.find();
}
}
4.2 中间件性能测试
app.use(bodyParser.json());
app.use(cors());
app.use(mongoSanitize());
app.use(helmet());
fastify.register(require('@fastify/cors'), {
origin: true
});
五、适用场景深度分析
5.1 选择Express的场景
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
5.2 Fastify的极致性能场景
const server = fastify();
server.get('/realtime', async (request, reply) => {
const data = await realTimeDataProcessor();
reply
.header('Content-Type', 'text/event-stream')
.send(data);
});
六、性能优化实战
6.1 内存占用对比
node --expose-gc build/app.js
// 使用128MB内存
node --expose-gc build/app.js
// 使用64MB内存
6.2 压力测试脚本
artillery run config.yml
config:
target: "http://localhost:3000"
scenarios:
- flow:
- get:
url: "/api/users"
duration: 60
arrivalRate: 100
七、常见问题解决方案
7.1 类型推断问题
const arr = [1, 2, 3];
arr.push("test");
const arr: number[] = [1, 2, 3];
7.2 框架兼容性问题
npm install @fastify/express
import fastify from 'fastify';
import { json } from 'express';
const app = fastify();
app.register(require('@fastify/express'));
app.use(json());
八、总结与选型建议
8.1 选型决策树
小规模
中大型
项目规模
选择Fastify
选择Express/NestJS
关注性能优化
需要复杂模块化
8.2 最佳实践
npm run build
npm run watch
npm run test