如何在 Flow 严格模式下编写数据类型不可知的事件总线?

问题描述

我正在尝试以 Flow 的严格模式编写事件总线:

const EventBus = {
  on(event: string,callback: any => void) {
    document.addEventListener(
      'myproject-' + event,(e: {detail: any}) => callback((e.detail)),);
  },...

我的事件总线实际上可以接受任何类型(包括 null),并且相信 document.addEventListener() 以后会返回相同的类型。

然而,这会触发 unclear-type 规则。

使用更具体的类型似乎没有帮助:

type DetailType = ?(string | {...});

const EventBus = {
  on(event: string,callback: DetailType => void) {
    document.addEventListener(
      'myproject-' + event,(e: {detail: DetailType}) => callback((e.detail: DetailType)),...
}

现在(很长的)错误是:

无法调用 document.addEventListener,因为:字符串 [1] 与字符串文字 wheel [2] 不兼容。或者字符串 [1] 与字符串文字 abort [3] 不兼容。或者不精确的对象类型 [4] 与第一个参数中的精确 MessageEvent [5] 不兼容。或者字符串 [1] 与字符串文字 beforeunload [6] 不兼容。或者字符串 [1] 与字符串文字 storage [7] 不兼容。或者不精确的对象类型 [4] 与第一个参数中的精确 Event [8] 不兼容。Flow(incompatible-call)

同样,我尝试了一个使用泛型的版本,但我不知道如何让 Flow 相信 document.addEventListener 稍后会触发一个包含与 detail 属性相同类型的事件。

我该如何处理这种情况?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)