自己实现了一个缩水版的EventTarget:interface MyEventTarget { addEventListener: (type: string, listener: EventListener) => void}但如果想和原生EventTarget混合使用的话:function test(foo: MyEventTarget | EventTarget) { return foo.addEventListener('click', console.log);}会报错:无法调用类型缺少调用签名的表达式。类型“((type: string, listener: EventListener) => void) | ((type: string, listener: EventListener | Eve...”没有兼容的调用签名。如果强行拆开的话,却又可以:function test(foo: MyEventTarget | EventTarget) { if (foo instanceof EventTarget) { return foo.addEventListener('click', console.log); } else { return foo.addEventListener('click', console.log); }}// OK但是实在是太丑了。所以请问一下大家:Is it a feature, or a bug?不论是feature还是bug,类似的情形应该怎样优雅地处理?
添加回答
举报
0/150
提交
取消