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

TypeScript报错TS2571: Object is of type 'unknown'如何解决

报错根因

TS2571 触发的核心原因是 TypeScript 4.0 及以上版本中,catch 块捕获的异常值默认类型为 unknown,TS 不允许直接访问 unknown 类型值的属性。
除此之外你的代码还有两个显性问题:

  • catch 关键字后没有声明接收异常的参数,块内直接使用error不符合基础语法
  • console.log(error) 写在 catch 块外部,超出error变量的作用域,同样会触发编译错误
修复方案

优先使用类型守卫做运行时校验,在确认异常结构符合预期后再访问属性,既解决编译报错,也避免运行时出现属性不存在的异常,修复后可直接运行的代码如下:

try {
  // 此处填写你的业务逻辑代码
} catch (error) {
  // 给错误信息设置默认值,避免非预期错误场景下返回undefined
  let errMsg = "服务器内部错误";

  // 类型守卫:校验error结构是否符合MongoDB唯一键重复错误的特征
  if (
    typeof error === "object"
    && error !== null
    && "code" in error
    && "keyValue" in error
    && (error as { code: unknown }).code === 11000
  ) {
    const duplicateKeyErr = error as {
      code: 11000;
      keyValue: Record<string, unknown>;
    };
    errMsg = `${Object.keys(duplicateKeyErr.keyValue)[0]}已存在`;
  }

  console.log(error);
  return res.status(500).json({ msg: errMsg });
}

如果项目不需要对catch块的异常做严格类型校验,也可以修改tsconfig.json配置,将catch块异常默认类型改回any:

{
  "compilerOptions": {
    "useUnknownInCatchVariables": false
  }
}

注意:不推荐直接在catch参数后写catch(error: any)绕过校验,这种写法会丢失类型检查能力,容易引发运行时异常。

内容的提问来源于stack exchange,提问作者hamdi ben abdelhafidh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:54:22