【问题标题】:Object 'err' is of type unknown对象“错误”的类型未知
【发布时间】:2021-11-16 11:15:39
【问题描述】:

所以我正在查看后端的一些代码,我注意到方法前面有 async 的任何地方,在 try/catch 语句内 TypeScript 抱怨 err 对象,说 Object 'err' is unknown,但是同步的方法不会发生这种情况。

async createOrganization(dbSession: ClientSession, organization: IOrganization): Promise<IOrganization> {
    try {
      // @ts-ignore
      const newOrganization = new this.Model(organization)
      // @ts-ignore
      await newOrganization.save()
      // @ts-ignore
      return newOrganization
    } catch (err) {
      throw new OrganizationCreationError(err.message)
    }
  }

在异步方法中使用 try/catch 会导致 err 对象未知,我该如何解决?

【问题讨论】:

    标签: typescript async-await try-catch


    【解决方案1】:

    catch 子句变量在历史上被键入为any,但由于TypeScript 4.4strict 编译器选项(或新的useUnknownInCatchVariables 选项)下,它现在被键入为unknown。它与方法的异步无关。

    如果您在代码库的其他一些属于相同 TypeScript 版本和编译器选项的部分中没有看到此错误,请考虑以下几个可能的原因:

    • catch 子句变量没有以与unknown 类型不兼容的方式使用,可能它被传递给接受unknownany 类型参数的函数。
    • catch 子句变量显式键入为any

    【讨论】:

      猜你喜欢
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2018-08-04
      相关资源
      最近更新 更多