流类型错误.对象类型与字符串不兼容



我写了一个小的Javascript类,它有一个接受字符串或对象的参数。但是,我收到此错误:

Error: utils/HttpError.js:8
8:    message:string | ErrorObj
^^^^^^^^ object type. This type is incompatible with
512:     message: string;
^^^^^^ string. See lib: /private/tmp/flow/flowlib_33322c59/core.js:512

我尝试不使用类型别名,并将 ErrorObj 简化为仅{},但我没有运气。这是一个错误,还是我错过了什么?我正在使用流箱^0.51.0。我的班级在下面。

//@flow
"use strict";
type ErrorObj = {[key:string]:Array<string>}
class HttpError extends Error {
status:number
message:string | ErrorObj
constructor(status:number, message: string | ErrorObj){
super();
this.status = status;
this.message = message;
}
toString():string{
return `status: ${this.status} message: ${JSON.stringify(this.message)}`;
}
}
module.exports = HttpError;

Error的内部定义将message成员变量类型化为字符串。即使在子类化之后,基类(Error(仍然可能以某种方式与this.message交互。如果您能够将其重新定义为字符串以外的任何内容,并且它尝试调用lengthconcatString类的其他某个成员,它将失败。因此,不能覆盖子类的成员类型。

您可以尝试如下操作:

type ErrorObj = {[key:string]:Array<string>}
class HttpError extends Error {
status:number
_customMessage:string | ErrorObj
constructor(status:number, message: string | ErrorObj){
super(typeof message === 'string' ? message : null);
this.status = status;
this._customMessage = message;
}
toString():string{
return `status: ${this.status} message: ${JSON.stringify(this._customMessage)}`;
}
}

相关内容

最新更新