【问题标题】:Flow eror "Property is missing in exports". Why?流错误“导出中缺少属性”。为什么?
【发布时间】:2018-04-06 01:54:27
【问题描述】:

我不明白 Flow 在抱怨什么。当我对这两个文件运行流程时,我收到错误Property MyType is missing in exports [1]

定义类型的文件:

// types.js
// @flow

export type MyType = {
  from: string,
  to: string,
  subject: string,
  text: string,
};

文件使用类型:

// myfile.js
// @flow
const { MyType } = require('./types') // flow error on this line

const foo = ({
  from = 'default',
  to,
  subject,
  text,
}: MyType) => {
  doSOmething();
}

导出类型的正确语法是什么?它在 Flow 文档中的什么位置,似乎只谈论导出整个模块?

【问题讨论】:

    标签: flowtype


    【解决方案1】:
    const { MyType } = require('./types')
    

    是真正的 JavaScript,这意味着即使您删除 Flowtype 声明,它仍然会运行。 MyType 在运行时不存在,因为所有 Flowtype 逻辑在执行前都被剥离。

    您应该将其导入为

    import type { MyType } from "./types";
    

    【讨论】:

    • 谢谢,我不明白 Flow 使用 import/export 而不是 require,无论您在其他地方使用什么来导入/require 模块。
    • 是的,大多数人最终只是使用 ES 模块导入/导出。如果您使用的是 Flow,那么您已经有了一个构建步骤,因此添加 babel-preset-env 只是能够使用 import/export 语法的 1 个额外插件。
    • @saadq import type 工作不需要模块转换。它与 ES6 导入语法完全分开。正常的流剥离逻辑会很好地删除它们。
    • 是的,对不起,我的意思是因为你必须使用 import type 语法,你还不如使用额外的 babel-plugin 来将 import/export 用于其他所有内容,而不是混合使用requireimport
    • @saadq Gotcha,很公平。
    【解决方案2】:

    Module Types 下提到过,如果您仔细阅读它,您会发现它正在讨论导出类型和值以及如何导入它们。这有点误导,因为页面标题暗示您正在导入“模块” - 实际上您正在导入导出的类型或值。

    type 关键字应该用在import 语句上,以指示您要导入类型,而不是值。

    因为您导出了一个类型,而不是一个值,但尝试导入一个值,您会收到错误消息。

    import type { MyType } from './types'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      相关资源
      最近更新 更多