Jam*_* Ko 9 javascript commonjs ecmascript-6 flowtype
Flow允许您使用以下语法导入类型:
// SomeClass.js
export default class SomeClass {}
// SomeFile.js
import type SomeClass from './SomeClass';
Run Code Online (Sandbox Code Playgroud)
使用import type而不是import?有什么好处?它是否告诉Flow更多信息并让它执行更好的静态分析?
对于类的特定情况,无论哪种示例都可以工作。关键是它会像这样分解:
import type ... from 导入流类型import ... from 导入标准JS值以及该值的类型。JS类产生一个值,但是Flowtype还将类声明解释为类型声明,因此两者都是。
那么哪里import type重要?
export type Foo = { prop: number };例如,只能与一起使用import type { Foo } from ...,因为没有名为的值Fooimport type ...影响导入的顺序。由于仅影响类型检查,而不影响运行时行为,因此可以导入类型而无需实际执行导入文件,从而避免了潜在的循环。正如此链接所述
使用导入类型,您想要导入类的类型,而不是真正的类本身。
在同一链接中给出的示例如下
// @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;
}
Run Code Online (Sandbox Code Playgroud)
由于我们导入URI到这个组件中,linter所以会检查我们是否使用了这个组件中的类。但是,我们仅将其用作流类型检查,因此linter会抛出错误,指出我们导入了未使用的变量。