Hapi使用Joi校验请求Payload时的TypeScript类型错误修复咨询
错误修复方案
错误提示(中文翻译)
类型“ObjectSchema”无法分配给类型“RouteOptionsResponseSchema | undefined”。
类型“import("/node_modules/@types/hapi__joi/index").ObjectSchema”中缺少属性“artifact”,但类型“import("/node/node_modules/joi/lib/index").ObjectSchema”中需要该属性。ts(2)
问题原因
项目中同时存在两个版本的Joi相关包/类型定义:@types/hapi__joi(旧版@hapi/joi的类型文件)和原生joi包,二者类型定义不兼容,导致类型校验冲突。
修复步骤
1. 统一Joi依赖
根据你使用的Hapi版本选择对应Joi:
- 若使用
@hapi/hapi框架,推荐配套用@hapi/joi,执行以下命令清理并安装正确依赖:
# 卸载原生joi和多余的类型包 npm uninstall joi @types/hapi__joi # 安装@hapi/joi(自带类型定义,无需额外装@types) npm install @hapi/joi
- 若要使用最新原生
joi包(需Hapi v20+版本支持),执行:
# 卸载@hapi/joi和旧类型包 npm uninstall @hapi/joi @types/hapi__joi # 安装最新joi npm install joi
2. 修正代码中的Joi导入
确保代码中所有Joi导入路径和依赖一致:
- 使用
@hapi/joi时:
import Joi from '@hapi/joi';
- 使用原生
joi时:
import Joi from 'joi';
3. 刷新类型校验
重启VSCode,或通过Ctrl+Shift+P打开命令面板,执行TypeScript: Restart TS Server来清除类型缓存,刷新校验结果。
内容的提问来源于stack exchange,提问作者mxcdh
相关产品推荐
相关产品推荐

