我正在嘗試使用流程0.53.1。你能幫我解釋一下這個奇怪的行爲嗎?流程中的遞歸類型定義
此代碼示例:
/* @flow */
type AnySupportedType =
| AnySupportedPrimitive
| AnySupportedObject
| AnySupportedArray;
type AnySupportedArray = Array<AnySupportedType>;
type AnySupportedObject = { [string]: AnySupportedType };
type AnySupportedPrimitive = boolean | number | string | void;
type DataID = string
type Data = {
id: DataID
}
const y: Data = { id: "123" }
const x: AnySupportedType = y;
呈現這樣的錯誤:
17: const x: AnySupportedType = y;
^object type. This type is incompatible with
17: const x: AnySupportedType = y;
^union: AnySupportedPrimitive | AnySupportedObject | AnySupportedArray
Link到flow.org基於web的例子一起玩。
是的,這似乎是這種情況。我想我應該明確地將數據對象的類型轉換爲「AnySupportedObject」,因爲我知道這些類型應該兼容。如果Flow提供了一種方法來檢查這種顯式轉換的正確性,那麼它會很好,但現在它似乎缺乏。 – MOZGIII
這不太對。 Flow支持記錄樣式對象和地圖樣式對象之間的子類型關係。這裏的問題實際上是可變的。我留下了一個解釋的答案。 –