Sequelize V5升级后model.d.ts文件出现TS1110类型期望错误
解决Sequelize V4升级到V5后的TS1110类型错误
我之前升级Sequelize的时候也碰到过一模一样的问题,这个错误的根源是TypeScript版本和Sequelize V5的类型定义不兼容。
错误原因分析
你看到的method: string | [string, ...unknown[]];这行代码,用到了两个TypeScript 3.0及以上版本才支持的特性:
unknown类型(TypeScript 3.0引入)- 数组剩余元素语法(
...unknown[]这种展开写法也是TS3.0+支持的)
如果你的项目里TypeScript版本低于3.0,编译器就识别不了这些语法,直接抛出TS1110: Type expected的错误。
解决方案
方案1:升级TypeScript版本(推荐)
这是最彻底的解决办法,直接把你的TypeScript升级到3.0或更高版本(建议升级到稳定的最新版)。执行以下命令:
npm install typescript@^3.0.0 --save-dev # 或者用yarn yarn add typescript@^3.0.0 --dev
升级后,不需要修改任何库文件,你的代码就能正常编译运行了。
方案2:临时修复类型定义(不推荐直接修改node_modules)
如果暂时无法升级TypeScript,可以修改Sequelize的类型定义文件,但不要直接编辑node_modules里的文件(下次install会被覆盖),推荐用patch-package来持久化修改:
- 安装
patch-package:
npm install patch-package --save-dev
- 修改
node_modules/sequelize/types/lib/model.d.ts第108行,把:
method: string | [string, ...unknown[]];
改成:
method: string | [string, ...any[]];
- 生成补丁文件:
npx patch-package sequelize
- 把生成的
patches/sequelize+xxx.patch文件提交到代码仓库,其他团队成员安装依赖后执行npx patch-package就能自动应用这个补丁。
关于你的模型定义
你的模型写法是完全符合Sequelize V5的要求的,只要解决了上面的TypeScript版本或类型定义问题,代码就能正常运行,不需要修改你自己的模型代码。
内容的提问来源于stack exchange,提问作者leogoesger
相关产品推荐
相关产品推荐

