NestJS使用Fastify适配器时enableVersioning方法不存在报错求助
问题原因
该TS类型报错触发原因分两类:
- 本地NestJS依赖版本低于8.0.0:API版本控制是NestJS 8正式上线的功能,7.x及更早版本的应用实例本身没有挂载
enableVersioning方法,属于调用不存在方法的真实错误 - 已确认NestJS版本≥8.0.0仍报错:属于
@nestjs/platform-fastify包的类型定义同步遗漏,是类型层面的假报错,不影响实际运行,但TS静态检查会抛出异常
对应解决方案
版本低于8.0.0的场景
将所有NestJS相关依赖统一升级到8.x及以上版本即可:
# npm执行 npm i @nestjs/common@^8 @nestjs/core@^8 @nestjs/platform-fastify@^8 # yarn执行 yarn add @nestjs/common@^8 @nestjs/core@^8 @nestjs/platform-fastify@^8 # pnpm执行 pnpm add @nestjs/common@^8 @nestjs/core@^8 @nestjs/platform-fastify@^8
升级完成后重启TS语言服务,报错会直接消除。
版本≥8.0仍报类型错的场景
通过交叉类型补全实例的类型定义即可,不需要改动业务逻辑,修改初始化代码如下:
import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'; // 合并Fastify应用实例和通用Nest实例的类型定义 const app = await NestFactory.create<NestFastifyApplication & INestApplication>( AppModule, new FastifyAdapter(fastifyInstance), {} ); // 此时TS可以正常识别enableVersioning方法 app.enableVersioning();
补充说明:Fastify适配器完全兼容NestJS自带的版本控制能力,该写法仅补全TS的类型识别,不会对运行时逻辑产生任何影响。
内容的提问来源于stack exchange,提问作者Mr Citizen
相关产品推荐
相关产品推荐

