フローは、JavaScriptコードを静的に記述するタイプレベルの言語です。実行時の効果はなく、コードの意味は変わりません。つまり、(正しくタイプされた)プログラムからFlowアノテーションを削除すると、まったく同じように実行されます。これは、Flowの設計目標の1つであり、TypeScriptのような言語とは区別されます。
Flowを使ってオブジェクトの構造を変更することはできません。あなたがオブジェクトのみ特定のフィールドを持つタイプを割り当てる場合は、フローは、あなたがになっていなかったフィールドを使用していないことを確認して助けることができます。
type MyType = {
x?: ?number,
y?: ?string
}
let foo: MyType = { "x": 1, "y": "Some String", "z": "Additional Payload" };
foo.z; // ERROR! Even though z is there, it's not part of MyType
をしかし、あなたがそれになりたいと言ってみましょう以前より厳格化されており、割り当てに追加のプロパティは許可されません。あなたは、他のフィールドが許可されないことを示すために{| .. |}
を使用することができます:それは外部ソースからのものである場合、それが到着すると、あなたはまだデータをチェックする必要があります
type MyType = {|
x?: ?number,
y?: ?string
|}
let foo: MyType = { "x": 1, "y": "Some String", "z": "Additional" }; // ERROR!
注意。フローはコンパイル時の情報のみを使用できます。
なぜ '?'を 'x'と' y'キーで使用しますか? 'z'キーが表示されることがあります。 –
よく、キー 'z'を削除する必要があります。そして時々、 'z1'、' z2'などのような追加のキーがあります。私が望むのは、 'x'と' y'だけを含むきれいなオブジェクトです。フローを使用してこれを行うことはできますか?それとも別のものを試すべきですか? –
私は、オブジェクトから目的のキーを選択するだけでよいと思います。フローにはこのような機能はありません。 –