You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode中Sequelize返回Bluebird类型无法赋值给Promise类型报错如何解决

Sequelize Bluebird 与原生 Promise 类型不兼容报错解决方案

报错根源

两类报错的触发原因一致:Sequelize v5及更早版本默认使用Bluebird作为异步Promise实现,其类型定义和TypeScript默认识别的ES标准Promise类型不匹配,传入仅声明了接收原生Promise入参的awaitToJs函数时就会触发类型校验失败。


可选用的解决方案

  • 方案1:升级Sequelize到v6+版本
    Sequelize从v6版本开始已将内置Promise实现更换为原生ES Promise,无需额外配置即可彻底解决类型冲突问题,是最推荐的处理方式。
  • 方案2:添加Bluebird类型兼容配置
    1. 安装Bluebird类型依赖:
      npm install @types/bluebird -D
    2. 在tsconfig.json的compilerOptions配置中加入Bluebird类型声明,让TypeScript全局识别Bluebird类型:
    {
      "compilerOptions": {
        "types": ["bluebird"]
      }
    }
    
    1. 给awaitToJs函数补充Bluebird入参的类型重载,适配两种Promise类型入参:
    import type Bluebird from "bluebird";
    
    function awaitToJs<T, E = Error>(
      promise: Promise<T> | Bluebird<T>
    ): Promise<[E, null] | [null, T]> {
      return promise
        .then((data: T) => [null, data] as const)
        .catch((err: E) => [err, null] as const);
    }
    
  • 方案3:临时类型断言规避
    不需要修改全局配置的场景下,直接给Sequelize查询方法的返回值断言为原生Promise即可:
    const [errorDB, responseDB]: any = await awaitToJs(
      db.Order.findAll({
        attributes: ['purchaseOrderNum'],
        where: {
          purchaseOrderNum: { [db.Op.or]: shopIds },
        },
      }) as Promise<any>
    );
    

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:09:04