node.js - 在 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 视频,
解决方案
就在最近,Typescript 已更新以使内部的错误对象catch
成为unknown
而不是any
这意味着,您的代码在编译器中看起来像这样
catch(e: unknown) {
// your logic
}
提供您自己的接口并保存到另一个变量中以避免此错误:
catch(e : unknown) {
const u = e as YourType
// your logic
}
您仍然可以any
在那里使用,但不建议这样做。
推荐阅读
- asp.net-core - Asp.Net Core Identity:GenerateChangePhoneNumberTokenAsync 不创建 AspNetUserTokens 记录
- php - 在 Laravel 中获取没有循环的集合值
- php - 在容器启动时运行 cron 会阻止 PHP 脚本显示网页
- python - DataFrame 是一个字符串 dtype 并使用 pandas 计算差异
- python-2.7 - 哪个 Cuda 版本与 Tensorflow 1.8.0 兼容?
- javascript - Chrome 扩展程序应使用 Web 应用程序或 Chrome 应用程序
- jenkins - 如何使用不同的数据集运行 jenkins 作业
- python - 将二进制文件读入结构(翻译指令)
- typo3 - TYPO3:如何使用外部 PHP 脚本(在 fileadmin 中),我可以在其中检查 cookie
- javascript - VueJs 从作为字符串传递的动态数组中获取错误,但如果数组是硬编码的,则工作正常