2014-04-22 68 views
1

有沒有辦法在TypeScript中設置this的類型?在TypeScript中輸入'this`

我敢肯定,它有很多用途,但在我的特殊情況下,它是用於輸入一個JS庫,併爲它編寫一個插件。

例如:

// Some library 
declare var SomeLib: sl.ISomeLibStatic; 
declare module sl { 
    interface ISomeLib extends ISomeLibApi { 
     baseFn(): void; 
    } 

    interface ISomeLibStatic { 
     new(): ISomeLib; 
     API: ISomeLibApi; 
    } 

    interface ISomeLibApi { 
    } 
} 

// Plugin file 
declare module sl { 
    // Extend the API signature declaration 
    interface ISomeLibApi { 
     extraFn(): void; 
    } 
} 

module sl { 
    // Implement the function 
    SomeLib.API.extraFn = function() { 
     // Get typing on this here 
     this.baseFn(); 
    }; 
} 

任何人知道的方式來做到這一點沒有像變量:var typedThis: ISomeLib = this;

目前我發現的唯一方法是將其投影到每個用法<ISomeLib>this上,這很麻煩,並且沒有在函數的類型中定義。

+0

我認爲這是根據Typescript規範(章節4.2)。沒有包含類,所以它是一個簡單的函數聲明,其中'this'被輸入到'Any'。既然這看起來很基本,我猜想TS有一個很好的理由不是在這裏打字 - 但我想不起來。也許別人會知道一個理由。 –

+1

您可以在https://typescript.codeplex.com/workitem/507上投票的相關功能請求 – basarat

+0

@basarat謝謝,我搜索了跟蹤器,但由於某種原因無法找到問題:S。 – Aidiakapi

回答

0

沒有辦法暗示語言服務應用於該功能的上下文。

,將乾淨的供應類型檢查和自動完成,而不會導致運行文物的唯一機制是:

(<ISomeLib>this).baseFn(); 

哪個編譯成所需:

this.baseFn(); 
+0

這種方法不會強制在正確的上下文中調用函數,所以您仍然可以使用'call','apply'或'bind'提供一個不同的'this',並且會得到一個運行時錯誤。 –

0

這是可以做到的如下:

function foo(this: MyType) { 
} 

您還可以使用this: this來執行f在聲明的上下文中調用unction,或者this: void以防止使用這個。

但是,此功能的目標版本是TypeScript 2.0(儘管它已在最新開發中實現)。

查看here瞭解詳情。

相關問題