【问题标题】:signature-verification-failure in Interface on Arrow function in Flow流中箭头函数接口中的签名验证失败
【发布时间】:2021-03-12 17:41:23
【问题描述】:

我最近使用 Flow 将一个项目更新到了 0.138.0 版本。 更新后,我第一次遇到类似这样的错误:

无法为此模块构建类型化接口。您应该使用类型注释此模块的导出。缺少类型 属性 _dispatchUpdate 处的注释:[签名验证失败]

我们的项目由许多类组成,其中一些看起来像这样

export class SomeActions {
  _interval: IntervalID;
  _isPolling: boolean;

  _dispatchUpdate = (downloadItems: DownloadItems[]): void => {
     AppDispatcher.dispatch({
       actionType: CONSTANT.CONSTANT,
       downloadItems,
     })
  }
} 

export default new SomeActions();

为了解决有问题的错误,我开始实现如下接口

interface SomeActionsT {
  _interval: IntervalID;
  _ isPolling: boolean;
  
  _dispatchUpdate: (DownloadItems[]): void;
}

export class SomeActions implements SomeActionsT {
  _interval: IntervalID;
  _isPolling: boolean;

  _dispatchUpdate = (downloadItems: DownloadItems[]): void => {
     AppDispatcher.dispatch({
       actionType: CONSTANT.CONSTANT,
       downloadItems,
     })
  }
} 

export default new SomeActions();

但流量错误仍然存​​在。如果我将 _dispatchUpdate 重构为普通函数,它将不再抱怨。但这很愚蠢。如何让流程识别箭头功能?

【问题讨论】:

    标签: javascript flowtype arrow-functions


    【解决方案1】:

    首先,您收到这些错误可能是因为您从默认情况下没有类型优先的旧版本更新。解释here

    要解决您的问题,您可以像这样输入您的课程

    export class SomeActions {
      _interval: IntervalID;
    
      _isPolling: boolean;
    
      _dispatchUpdate: DownloadItems[] => void = (downloadItems) => {
        AppDispatcher.dispatch({
          actionType: CONSTANT.CONSTANT,
          downloadItems,
        });
      }
    }
    
    export default (new SomeActions(): SomeActions);
    

    因为您要导出 new Class,所以您还必须明确声明其类型,否则只需 export default SomeActions; 就足够了。

    【讨论】:

    • 干杯,这有效。我找到了您所指的那个,但对参数和返回类型没有任何意义。这很棒。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2020-10-01
    • 2017-11-28
    • 2013-10-28
    • 2020-11-02
    • 2016-01-13
    相关资源
    最近更新 更多