【发布时间】:2020-04-12 16:04:03
【问题描述】:
以下是最适合在 Chrome Devtools、Node.js 等中显示自定义错误的代码。基于this StackOverflow answer。
function CustomErr (message) {
var err = new Error(message)
Object.setPrototypeOf(err, CustomErr.prototype)
return err
}
CustomErr.prototype = Object.create(Error.prototype, {
name: { value: 'Custom Error', enumerable: false }
})
但是,当我将其转换为 Typescript 时:
function CustomErr (message: string) {
var err = new Error(message)
Object.setPrototypeOf(err, CustomErr.prototype)
return err
}
CustomErr.prototype = Object.create(Error.prototype, {
name: { value: 'Custom Error', enumerable: false }
})
调用throw new CustomErr("something went wrong") 显示此错误:
'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.ts(7009)
如何正确地对我的代码进行类型注释?如果您能找到另一个等效的代码解决方案,请随时提出建议,但它必须在 Chrome DevTools 中具有相同的行为(我尝试过的所有解决方案中都可以很好地显示自定义错误名称)。谢谢!
编辑: 需要支持旧版浏览器,所以不能使用 ES6 类。我不希望将类转换为 ES6,因为我正在创建一个轻量级库,并且仅一个类 polyfill 就占我整个代码大小的 10%。
所以回顾一下,我如何注释我现在拥有的代码?
【问题讨论】:
-
您是否在编译时收到此错误?
-
你必须编译(或至少是 trasile)打字稿,不编译是什么意思......没有它你将无法运行打字稿。
-
如果你确实想要一个轻量级的 ES5 库,你可能真的想考虑编写一个轻量级的 ES5 库,并且在此过程中不要接触 TypeScript。反之亦然:如果你编写 TypeScript,让工具担心 JavaScript。
标签: javascript typescript ecmascript-5