如何在接口中未定义的打字稿类中插入属性

时间:2021-03-03 05:33:21

标签: javascript typescript error-handling extends

我有一个使用打字稿的快速应用程序。我正在尝试使用自定义错误处理程序,因为我正在尝试扩展错误类。

errorResponse.ts

export default class ErrorResponse extends Error {
    constructor(message, statusCode, errorCode) {
        super(message);
        this.statusCode = statusCode;
        this.errorCode = errorCode;
    }
}

打字稿给出错误,因为我扩展的错误接口具有以下定义

interface Error {
    name: string;
    message: string;
    stack?: string;
}

目前为了解决方法,我已将其设为 javascript 文件。但是如何将其用作打字稿文件并正确使用它。以便属性 statusCode 和 errorCode 不会给出 ts 错误。

使用“打字稿”的版本:“^4.0.3”

2 个答案:

答案 0 :(得分:1)

您似乎想扩展 Error 类并使用两个新字段对其进行扩充,正确的做法是:

TS Playground link

export default class ErrorResponse extends Error {
  constructor(
    message: string,
    public statusCode: number,
    public errorCode: string
  ) {
    super(message);
  }
}

const e = new ErrorResponse("something", 404, "Not found");
e.errorCode; // works
e.message; // works
e.name; // works

答案 1 :(得分:0)

Error 是一个接口,而ErrorResponse 是一个。所以 ErrorResponse 不能扩展 Error 但可以实现它。

export default class ErrorResponse implements Error { // class 'implements' interface
    constructor(message, statusCode, errorCode) {
        this.message = message;
        this.statusCode = statusCode;
        this.errorCode = errorCode;
    }
}