2015-08-16 109 views
4

lib.d.ts我們可以發現下面的代碼:什麼是Typescript原型?

interface Error { 
    name: string; 
    message: string; 
} 

interface ErrorConstructor { 
    new (message?: string): Error; 
    (message?: string): Error; 
    prototype: Error; 
} 

declare var Error: ErrorConstructor; 

什麼是ErrorConstructorprototype屬性的意義是什麼?

回答

2

除了JavaScript構造函數的prototype屬性的正常特殊意義之外,TypeScript中的prototype屬性沒有特別的意義。

在此代碼中,ErrorConstructor類型/接口的prototype屬性被設置爲確保直接訪問ErrorConstructor.prototype的任何代碼都將獲得該屬性的正確類型信息。

相反,ErrorConstructornew簽名定義了使用new調用創建的對象的類型。構造函數的new返回值和構造函數的prototype名義上是相同的類型,但JavaScript允許構造函數返回不屬於它們自己類型的值,因此區分是正確鍵入所有可能的JavaScript代碼所必需的。

+0

我可能是錯的,但在我看來,'ErrorConstructor'接口並不是真正意義上的使用/引用。它似乎只是爲了讓我們可以圍繞外部錯誤對象「腳手架」類型信息。有鑑於此,訪問'ErrorConstructor.proptotype'的可能的實際原因是什麼? –

+1

好點。除了完全複製ECMAScript標準中定義的內容外('lib.d.ts'畢竟是自動生成的),具有'prototype'的類型可以幫助'Error'類的手動擴展。 –