Javascript 做'有意义吗;导入类型';而不是';导入&x27;流动?
Flow允许您使用以下语法导入类型: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
// 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工具不知道流的存在。
导出类型Foo={prop:number}例如,code>仅在从…
导入类型{Foo}时才重要,因为没有名为Foo
如果您要导入的东西有一个JS值,但您只需要类型
- 仅导入类型可以使代码更具可读性,因为从导入中可以清楚地看出,仅使用类型,因此文件中的任何内容都不能创建该类的新实例
- 有时仅导入类型将允许您避免文件中的依赖循环。根据代码的编写方式,有时导入内容的顺序很重要。由于导入类型…
只影响类型检查,而不影响运行时行为,因此可以导入类型,而不需要实际执行导入的文件,从而避免潜在的循环