以下是最适合显示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 } })
但是,当我将其转换为打字稿时:
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%。因此,我该如何注释现在的代码?
以下是最适合显示Chrome Devtools,Node.js等中的自定义错误的代码。基于此StackOverflow答案。函数CustomErr(消息){var err = new Error(...
几件事。这样做的目的是什么,为什么不让打字稿将代码编译为es5或Babel。我实际上只是在这里复制并粘贴代码,然后编译:https://codepen.io/jaraolveda/pen/ExaWbxy这告诉我您在tsconfig.json
上的作用可能太重了。但是,如果您真的想要我,请参阅如何执行类似的操作。这是一个如何做的例子How to implement a Typescript interface to an es5-style "class"?
我仍然不知道如何注释我的代码,但是仅将throw new CustomErr('err')
更改为throw CustomErr('err')
可以解决我的问题。尽管JS允许您使用new
构造函数,但TypeScript却不允许。
您可以声明类,但可以通过函数来实现。这样,输出(生成的javascript)将不会受到影响,但是打字稿会将CustomErr
视为“可更新的”: