首页 > 解决方案 > Flow.js 从节点模块推断返回类型

问题描述

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

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

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

import myModule from 'mymodule'

const { errors } = myModule.myFunction()

不知何故 Flow.js 说它应该是一个字符串,并且errorsmyFunction(). 换句话说,它推断它是一个字符串,即使它可能是一个带有errors.

Flow.js 是否在挖掘节点模块逻辑?我没想到它走得那么远。

我在这里遗漏了一些明显的东西吗?

标签: javascripttypesfrontendflowtypestatic-analysis

解决方案


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


推荐阅读