2017-09-02 40 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