Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 做'有意义吗;导入类型';而不是';导入&x27;流动?_Javascript_Ecmascript 6_Flowtype_Commonjs - Fatal编程技术网

Javascript 做'有意义吗;导入类型';而不是';导入&x27;流动?

Javascript 做'有意义吗;导入类型';而不是';导入&x27;流动?,javascript,ecmascript-6,flowtype,commonjs,Javascript,Ecmascript 6,Flowtype,Commonjs,Flow允许您使用以下语法导入类型: // SomeClass.js export default class SomeClass {} // SomeFile.js import type SomeClass from './SomeClass'; 使用导入类型而不是导入有什么好处?它是否告诉Flow更多的信息并让它执行更好的静态分析?如本文所述 使用导入类型,您希望导入类的类型,而不是真正的类本身 在同一链接上给出的示例如下 // @flow // Post-transformatio

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

// SomeClass.js
export default class SomeClass {}

// SomeFile.js
import type SomeClass from './SomeClass';
使用
导入类型
而不是
导入
有什么好处?它是否告诉Flow更多的信息并让它执行更好的静态分析?

如本文所述

使用导入类型,您希望导入类的类型,而不是真正的类本身

在同一链接上给出的示例如下

// @flow

// Post-transformation lint error: Unused variable 'URI'
import URI from "URI";

// But if you delete the require you get a Flow error:
// identifier URI - Unknown global name
module.exports = function(x: URI): URI {
  return x;
}

由于我们已将
URI
导入此组件,
linter
将检查我们是否在此组件中使用了该类。但是,我们仅将其用作流类型检查,因此
linter
将抛出一个错误,表明我们导入了未使用的变量

对于类的特定情况,两个示例中的任何一个都有效。关键是它会这样分解:

  • 导入类型。。。从导入流类型
  • 导入。。。从
    导入标准JS值以及该值的类型
JS类生成一个值,但Flowtype也将类声明解释为类型声明,因此两者都是

那么,
导入类型在哪里重要呢

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