Flow动态地向Error添加属性

时间:2017-09-02 22:39:05

标签: javascript flowtype

我尝试将自定义属性添加到本机JavaScript Error

  const error = new Error(message);
  error.name = name;
  error.request = request;

Flow抛出以下错误(预期):

16:   error.request = request;
             ^^^^^^^^ property `request`. Property not found in
16:   error.request = request;
       ^^^^^ Error

我可以为此创建一个界面吗? 如果是的话,如何" downcast" Error到新界面?

我已经阅读了很多类似情况的文章,但似乎解决方案是: - 很明显,很难找到新人 - 或者不存在,所以我们应该使用另一种模式

这里的任何例子都会非常感激。

1 个答案:

答案 0 :(得分:1)

与大多数语言一样,您最好的选择可能是使用额外的特性来扩展Error对象。

例如。像 - >

之类的东西
class MyError extends Error {
  name: string;
  request: any;
  constructor(message, name, request) {
    super (message);
    this.name = name;
    this.request = request;
  }
}

然后使用喜欢 - >

const error = new MyError(message, name, request);

或者,如果不能选择子分类。也许 - >

const error = (new Error(message):any);
error.name = name;
error.request = request;

或者进行更多类型检查。

interface ErrorNameRequest {
   name?: string;
   request?: any;
}

const error = (new Error(message):ErrorNameRequest);
error.name = 'one two three';
error.name2 = 'xyz';  //error..