首页 > 解决方案 > 如何在打字稿中使用`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 他们也这样做。

我的代码有什么问题?

标签: javascripttypescript

解决方案


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

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

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

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


推荐阅读