2017-09-02 22 views
0

我尝试自定义属性添加到本地JavaScript Error流量动态地添加属性错误

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

流引发以下错误(预计):

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

我可以创造一个这个界面? 如果是,如何“downcast”Error到新界面?

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

在这里的任何例子将不胜感激。

+0

扩展对象并添加自己的属性 – Li357

+0

有很多原因我不想扩展该对象。 下面是我更想实现的:http://gunargessner.com/subclassing-exception/ 但是Flow不喜欢它。 – rayrutjes

回答

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.. 
+0

这确实可以解决问题,但会引入新的问题。 我更想找到一种方法来保持我的代码,但让Flow接受它。 – rayrutjes

+0

不确定的反对票,但我已经用一些更多的选择更新了我的答案。 – Keith

+0

感谢您的回答,我最终使用了最后两个建议的混合:'const error:CrawlError =(new Error(message):any);'。 – rayrutjes