我尝试在返回L.DomEvent.on(e)
的命名空间(this
)中编写函数的类型定义。 JavaScript源代码就像
L.DomEvent = {
// @function on(el: HTMLElement, eventMap: Object, context?: Object): this
on: function(e) {
// do stuff
return this;
}
}
我首先将定义写成如下
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
(它有效),但我想知道是否有更好的解决方案来定义输出。
答案 0 :(得分:1)
根据github中的代码,您的声明应如下所示:
declare namespace L {
export namespace DomEvent {
export function on(el: HTMLElement, types: string, fn: Function, context?: any): typeof DomEvent;
}
}
您只需将this
作为类型返回polymorphic this types,但在这种情况下,返回的this
是DomEvent
命名空间,因此我们返回typeof DomEvent
。