【问题标题】:Extract flow type annotations into external files将流类型注释提取到外部文件中
【发布时间】:2018-01-28 21:44:24
【问题描述】:

我想从我的源代码中去除冗长的 Flow。有没有办法在单独的文件中声明类型?

这就是我所拥有的:

// @flow
// src/writer.js
class Writer {
  write(text: string):string {
    return `I wrote ${text}`
  }
}

这就是我想要实现的目标:

// @flow
// src/writer.js
class Writer {
  write(text) {
    return `I wrote ${text}`
  }
}

// src/definitions/writer.js.flow
declare class Writer {
  write(text: string):string
}

我尝试将writer.js.flow 放在flow-typed 文件夹中,还尝试声明Writer 将扩展的IWriter 接口。 Flow 不喜欢它。

我不确定这是否可能,因为函数可以声明自己的变量,这些变量也应该被正确注释。

【问题讨论】:

  • 我想你会将.js.flow 文件与.js 文件放在同一个文件夹中?
  • @loganfsmyth 它不起作用
  • 再看一遍,您是否尝试对给定文件的导出类进行类型检查? Flow 的.js.flow 文件适用于在模块边界公开的类型,但它们在实现该逻辑的文件中不会真正产生任何影响。我不完全确定我理解你在这种情况下拆分事情的动机。不必复制所有功能,这样会使其冗长吗?

标签: javascript ecmascript-6 flowtype flow-typed


【解决方案1】:

没有办法在 Flow 中完全按照您的意愿行事。支持一些特定的用例:

  • 如果您有一些非 Flow 代码(如库)和一些 Flow 应用程序代码,并且您希望 Flow 代码可以使用非 Flow 代码但知道涉及哪些类型,您可以为无类型代码编写"library definition"。重要的是要理解这个库定义没有根据实现代码检查,它只是假设为真的,所以你必须小心编写 libdefs。

  • 如果您有 Flow 代码并且想要在没有 Flow 注释的情况下读取或运行它,您可以使用 flow-remove-types 从文件中去除 Flow 语法。

但我认为你想要别的东西。听起来您想编写没有 Flow 注释的代码,然后将注释写入另一个文件,但让 Flow 根据代码检查注释。这不是 Flow 目前支持的。

(顺便说一句,我也不希望他们会添加它。类型的主要好处是在阅读、编写和思考代码时提供帮助。Flow 具有很好的推理能力,所以总的来说你不必写出这么多类型。但是你做的那些(如在导出的函数中)通常有助于思考代码。)

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多