フローでは、次の構文を使用してタイプをインポートできます。
// SomeClass.js
export default class SomeClass {}
// SomeFile.js
import type SomeClass from './SomeClass';
import
の代わりにimport type
を使用する利点は何ですか? Flowにより多くの情報を伝え、より良い静的分析を実行させますか?
クラスの特定のケースでは、どちらの例でも機能します。重要なことは、次のように分解されることです。
import type ... from
はフロータイプをインポートしますimport ... from
は、標準のJS値とその値のタイプをインポートします。JSクラスは値を生成しますが、Flowtypeもクラス宣言を型宣言として解釈するため、両方になります。
では、import type
はどこで重要なのでしょうか。
export type Foo = { prop: number };
は、たとえばFoo
という名前のvalueがないため、import type { Foo } from ...
でのみ重要になります。import 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;
}
URI
をこのコンポーネントにインポートしたため、linter
は、このコンポーネントでクラスを使用したかどうかを確認します。ただし、フロータイプチェックとしてのみ使用しているため、linter
は未使用の変数をインポートしたことを示すエラーをスローします。