0
Flow docs約Any
タイプでは、Any
タイプを使用するのは安全ではないと言います。Any
がコード内の他の変数に漏れるのを避けるため、できるだけ早くそのタイプの演算結果をキャストする必要があります。このキャスティングは下記のlet foo: number = obj.foo
行で行われます。パラメータobj
ためFlowは、この例ではNumberをAny型にキャストできるのはなぜですか?
// @flow
function fn(obj: any) /* (:number) */ {
let foo: number = obj.foo;
let bar /* (:number) */ = foo * 2;
return bar;
}
let bar /* (:number) */ = fn({ foo: 2 });
let baz /* (:string) */ = "baz:" + bar;
fn
の引数には、何もすることができます。プロパティは何でも持つことができます。 なぜあなたは上記のキャスティングを行うことができますか?obj.foo
は何でもかまいませんので、fooが数字になることは保証できません。
'obj'は型指定されていません。したがって、あなたの明示的な型名の注釈 'let foo:number'が正しいことが、フローに確信を持たなければなりません。あなたは流れから何を期待しますか?あなたの型注釈を信用しないようにするには?型の安全を望むなら、 'any'を使わないでください。 – ftor
ええ、 'any'を使うと、文字通り、あなたがしていることを挫折させていることを伝えています。 – loganfsmyth