Flow是靜態描述JavaScript代碼的類型級語言。它沒有運行時效果,並且不會更改代碼的含義 - 如果從正確類型的程序中刪除Flow註釋,則它將運行完全相同。這是Flow的設計目標之一,它將其與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'。這可以使用Flow完成,還是應該嘗試其他方法? –
我想你將不得不從對象中選擇所需的鍵。流程沒有這些功能。 –