对象'err'的类型未知



所以我正在查看一些后端代码,我注意到任何地方的方法有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,但自从TypeScript 4.4在strict编译器选项(或新的useUnknownInCatchVariables选项)下,它现在类型为unknown。这与方法的异步性无关。

如果你没有在代码库的其他部分看到这个错误,而这些部分属于相同的TypeScript版本和编译器选项,那么有几个可能的原因:

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

最新更新