如何在打字稿中使用`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
}
如果你在它们应该出现的地方添加分号,问题就会消失。