2017-01-17 11 views
1

次のスニペットを指定すると、私は以下のエラーを受け取ります... どうすれば修正できますか?次のjavascriptコードを修正してflowtypeで動作させるにはどうすればよいですか?

この型は、期待される の戻り値の型enumと互換性がありません。

type Size = 1 | 2 | 3; 
const GetSize =(): Size => { 
    const result: number = parseInt(Math.random() * 20); 
    if (result > 3) { 
     return 3; 
    } 
    return result; 
}; 

することはできtry it online ...

編集:

問題が列挙型の整数からの変換に関連しています。

答えて

0

Math.random()は、[0、1]の間の "浮動小数点"番号を返します。したがって、0.5または0.31231を返すことができます。型は実際には互換性がありません。等しい確率で0または1のいずれかが返されたとしても、依然としてSize型の制約の外にいます。

これを修正するには、return (int)result + 1のようなものがあります。しかし、Flowがそれを理解するのに十分なほどスマートであるかどうかはわかりません。適切な方法は、あなたが予期しているすべてのケースに対してif/elseを使用し、それらに基づいて明示的に1,2または3を返すことです。

0

Math.random()は0と1の間の乱数を返します。戻り値の型はnumberです。

定義した戻り値の型がそれよりも厳しい場合は、1 | 2 | 3です。 Math.random()は、定義した戻り値の型に準拠していないため、返すことはできません。それは誤りです。

+0

おかげで、フローの問題を解決しない固定のサブタイプではないので、それをキャストすることはできません、問題の説明を追加しました。 – locropulenton

+0

@alejandrogarciarobles 'return result'の代わりに' return 1'を使うと動作します。問題は、あなたの列挙から何かの代わりに '数値'を返そうとしていることです。 –

+0

正確には、なぜ以下の文が正しいのか分からないのですか? – locropulenton

関連する問題