自己實現了一個縮水版的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,類似的情形應該怎樣優雅地處理?
實際上兼容的兩個函數,為什么TypeScript報錯“沒有兼容的調用簽名”?
拉莫斯之舞
2019-03-15 15:19:28