javascript - 使用 Flow 执行 'import type' 而不是 'import' 是否有意义?

标签 javascript ecmascript-6 flowtype commonjs

Flow 允许您使用以下语法导入类型:

// SomeClass.js
export default class SomeClass {}

// SomeFile.js
import type SomeClass from './SomeClass';

使用 import type 而不是 import 有什么好处?它是否告诉 Flow 更多信息并让它执行更好的静态分析?

最佳答案

对于类的特定情况,这两个示例都可以。关键是它像这样分解:

  • import type ... from 导入 Flow 类型
  • import ... from 导入一个标准的 JS 值,以及该值的类型。

一个 JS 类产生一个值,但是 Flowtype 也将一个类声明解释为一个类型声明,所以它是两者

那么 import type 重要在哪里呢?

  1. 如果您要导入的东西没有值,使用值导入在某些情况下会被解释为错误,因为大多数 JS 工具不知道 Flow 的存在。
  • export type Foo = { prop: number }; 例如只能使用 import type { Foo } from ... 导入,因为没有 value 名为 Foo
  1. 如果你导入的东西有一个 JS 值,但你想要的只是类型
  • 仅导入类型可以使代码更具可读性,因为从导入中可以清楚地看出仅使用了类型,因此文件中的任何内容都无法创建该类的新实例。
  • 有时只导入类型可以避免文件中的依赖循环。根据代码的编写方式,有时导入内容的顺序可能很重要。由于 import type ... 仅影响类型检查,而不影响运行时行为,因此您可以导入类型而不需要实际导入要执行的文件,避免潜在的循环。

关于javascript - 使用 Flow 执行 'import type' 而不是 'import' 是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50441093/

相关文章:

javascript - 以表格形式排列 JSON 数据

javascript - 如何使用选择的 max_selected_options 作为动态值?

javascript - JS 中奇怪的函数定义语法

react-native - 在 react-native 中使用 ref 时的流程错误

javascript - 如何在无状态功能组件上正确使用 React.StatelessFunctionalComponent<Props> ?

javascript - Google App Script - 如何在不定义对象的情况下使用方法

javascript - this.model.get 不是一个函数

node.js - 在 Node 5.9 中使用 ES6 语法进行变量交换的正确方法是什么?

javascript - Eslint 关于解构的警告

javascript - Flow 的 $ElementType 的奇怪行为