如何在打字稿中使用`super()`

我想简单地扩展标准的 javascriptError类。我想添加另一个属性:code,但不知何故,打字稿不允许我这样做。

export class HttpError extends Error {
    public message: string
    public errorCode: number
    constructor(message: string, errorCode: number) {
        super(message) // Add a
        (this as any).code = errorCode
    }
}

打字稿错误位于super(message)

This expression is not callable.
Type 'void' has no call signatures.ts(2349)

但是,在打字稿文档中:https : //www.typescriptlang.org/docs/handbook/classes.html
他们也这样做。

我的代码有什么问题?

回答

在我的主观看来,这是一个很好的例子,说明为什么省略分号不是一个好的做法。虽然 Javascript 支持自动分号插入,但它通常会导致像这样的意外错误。

在编译器看到的时候重新格式化你的代码,错误变得明显:

constructor(message: string, errorCode: number) {
    super(message)(this as any).code = errorCode
}

如果你在它们应该出现的地方添加分号,问题就会消失。


以上是如何在打字稿中使用`super()`的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>