首页 > 解决方案 > 在 Typescript 中,try...catch 错误对象显示“对象类型为‘未知’.ts(2571)”

问题描述

router.get('/cells', async (req, res) => {
    try {
      const result = await fs.readFile(fullPath, { encoding: 'utf-8' });
      res.send(JSON.parse(result));
    } catch (err) {
      if (err.code === 'ENOENT') { // Object is of type 'unknown'.ts(2571) (local var) err: unknown
        await fs.writeFile(fullPath, '[]', 'utf-8');
        res.send([]);
      } else {
        throw err;
      }
    }

err.code使这个 ts 错误:Object is of type 'unknown'.ts(2571)

我肯定知道err.code存在,所以我想知道如何定义的类型(或接口)err

(tsc 版本信息:我的全局 typescript 版本是v4.3.5,上面的代码属于我的项目,它有typescript v4.1.2

- - 编辑 - -

我终于知道为什么这个错误会发生在我身上。我以为我用的是4.3.x下的tsc版本,结果我用的是v4.4.x。

在vscode中,cmd + shift + P搜索Select Typescript version,我实际使用的是v4.4.3,(我错误地认为版本,因为我只从终端检查tsc版本)

在此处输入图像描述

在此处输入图像描述

感谢分享Youtube 视频

标签: node.jstypescript

解决方案


就在最近,Typescript 已更新以使内部的错误对象catch成为unknown而不是any

这意味着,您的代码在编译器中看起来像这样

catch(e: unknown) {
// your logic
}

提供您自己的接口并保存到另一个变量中以避免此错误:

catch(e : unknown) {
const u = e as YourType
// your logic
}

您仍然可以any在那里使用,但不建议这样做。


推荐阅读