gpt4 book ai didi

javascript - typescript : 'new' 表达式,其目标缺少构造签名,隐式具有 'any' type.ts(7009)

转载 作者:行者123 更新时间:2023-12-04 01:56:50 25 4
gpt4 key购买 nike

以下是最适合在 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%。

回顾一下,我如何注释我现在拥有的代码?

最佳答案

您可以声明类,但使用函数实现它。这种方式输出(生成的 javascript)不会受到影响,但 typescript 会处理 CustomErr作为“新能源”:

declare class CustomErr extends Error {
constructor(message: string);
}

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") // no error now

Playground

关于javascript - typescript : 'new' 表达式,其目标缺少构造签名,隐式具有 'any' type.ts(7009),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59420203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com