Flow.js从节点模块推断返回类型

时间:2019-06-06 22:28:28

标签: javascript types frontend flowtype static-analysis

我正在使用带有联合返回类型的Flow.js使用declare module键入节点模块。

declare module 'mymodule' {
  declare export default {
    myFunction: () => string | { errors: [] },
  }
}

但是当我在应用程序中使用它时

import myModule from 'mymodule'

const { errors } = myModule.myFunction()

以某种方式Flow.js说它应该是一个字符串,并且errorsmyFunction()返回的值上不存在。换句话说,即使它可以是errors的对象,也可以推断它是一个字符串。

Flow.js是否正在深入研究节点模块逻辑?我不认为它走得那么远。

我在这里缺少明显的东西吗?

1 个答案:

答案 0 :(得分:1)

Flow不知道myFunction是否会返回字符串或对象-分配给myFunction结果的变量类型为string | { errors: [] }。因此,Flow希望您将结果视为两者,并且不允许您将变量用作对象或字符串,除非您向Flow证明它确实是其中之一(Try Flow)。