一、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