如何在接口中未定义的打字稿 class 中插入 属性
how to insert a property in typescript class which is not defined in the interface
我有一个使用打字稿的快速应用程序。我正在尝试使用自定义错误处理程序,因为我正在尝试扩展错误 class.
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”
Class Error
是一个接口,ErrorResponse
是一个class.所以 ErrorResponse
不能扩展 Error
但可以实现它。
export default class ErrorResponse implements Error { // class 'implements' interface
constructor(message, statusCode, errorCode) {
this.message = message;
this.statusCode = statusCode;
this.errorCode = errorCode;
}
}
您似乎想扩展 Error
class 并增加两个新字段,正确的做法是:
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
我有一个使用打字稿的快速应用程序。我正在尝试使用自定义错误处理程序,因为我正在尝试扩展错误 class.
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”
Class Error
是一个接口,ErrorResponse
是一个class.所以 ErrorResponse
不能扩展 Error
但可以实现它。
export default class ErrorResponse implements Error { // class 'implements' interface
constructor(message, statusCode, errorCode) {
this.message = message;
this.statusCode = statusCode;
this.errorCode = errorCode;
}
}
您似乎想扩展 Error
class 并增加两个新字段,正确的做法是:
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