Flow允许您使用以下语法导入类型:
// SomeClass.js
export default class SomeClass {}
// SomeFile.js
import type SomeClass from './SomeClass';
使用import type
代替import
的好处是什么?它是否告诉Flow更多信息并让它执行更好的静态分析?
答案 0 :(得分:5)
对于类的特定情况,这两个示例都可以。关键是它会像这样崩溃:
import type ... from
导入流式import ... from
导入标准JS值以及该值的类型。JS类生成一个值,但Flowtype也将类声明解释为类型声明,因此都是。
那么import type
在哪里重要?
export type Foo = { prop: number };
仅对import type { Foo } from ...
很重要,因为没有名为Foo
的值 import type ...
仅影响类型检查,而不影响运行时行为,因此可以导入类型而不需要实际执行导入的文件,从而避免潜在的循环答案 1 :(得分:3)
如此link
所述使用导入类型,您希望导入类的类型,而不是类本身。
以下相同链接给出的示例
// @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
会抛出错误,说我们导入了未使用的变量。