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