对象 'err' 的类型未知

Object 'err' is of type unknown

所以我正在查看后端的一些代码,我注意到任何地方的方法前面都有 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 对象未知,我该如何解决?

catch 子句变量的历史类型为 any,但由于 strict 编译器选项(或新的 useUnknownInCatchVariables 选项)下的 TypeScript 4.4 现在类型为作为 unknown。它与方法是否同步无关。

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

  • catch 子句变量没有以与 unknown 类型不兼容的方式使用,也许它被传递给接受 unknownany 类型参数的函数.
  • catch 子句变量明确类型化为 any