在返回此函数的命名空间中键入函数的定义

时间:2016-10-15 23:14:07

标签: typescript

我尝试在返回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(它有效),但我想知道是否有更好的解决方案来定义输出。

1 个答案:

答案 0 :(得分: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,但在这种情况下,返回的thisDomEvent命名空间,因此我们返回typeof DomEvent