2
私はthis exampleはです。TypeCheckていないことを確認するために驚いた:フローの細分化は「上向き」に伝播しませんか?
/* @flow */
type State = { flag: boolean }
function firstStep(state: State) {
if (state.flag) {
secondStep(state)
// this works though:
// secondStep({ flag: state.flag })
}
}
function secondStep(state: { flag: true }) {}
3: type State = { flag: boolean }
^boolean. Expected boolean literal `true`
13: function secondStep(state: { flag: true }) {}
^boolean literal `true`
の流れは、それがtrue
へstate.flag
を絞り込むことができます知っているが、それはstate
が{ flag: true }
に改良することができるということを知りません。それは期待されていますか?
'secondStep'は' secondStep'に 'state'への参照を保持できるので、' firstStep'は 'state.flag'をfalseに変更する可能性があります。もしあなたがunionの1つのブランチに入ったら、 'flag'が効果的に不変であるので、不規則なユニオンはそれを修正します。 –
良いキャッチ。私はこの情報を含めるために私の答えを編集します。 –
ああ、本当に面白い点@ライアンカバナフ。そのようなことが問題かどうか疑問に思っていました。バマー! –