2016-10-15 40 views
2

我嘗試在名稱空間(L.DomEvent.on(e))中寫入函數的類型定義,該函數返回this。 JavaScript的源代碼就像返回該名稱空間中函數的類型定義

L.DomEvent = { 
    // @function on(el: HTMLElement, eventMap: Object, context?: Object): this 
    on: function(e) { 
     // do stuff 
     return this; 
    } 
} 

查看detail source code

予先寫的定義如下

declare namespace L { 
    export namespace DomEvent { 
     export function on(el: HTMLScriptElement): this; 
    } 
} 

但是,編譯器會引發錯誤與消息

error TS2526: A 'this' type is available only in a non-static member of a class or interface. 

雖然我可以將輸出從this改變any(它的工作原理),I想知道是否有更好的解決方案來定義輸出。

回答

1

基於在GitHub上的聲明代碼看起來應該是這樣:

declare namespace L { 
    export namespace DomEvent { 
     export function on(el: HTMLElement, types: string, fn: Function, context?: any): typeof DomEvent; 
    } 
} 

code in playground

你只返回this當你需要它爲polymorphic this types一個類型,但在這種情況下, this即返回的是DomEvent命名空間,所以我們返回typeof DomEvent

相關問題