【发布时间】:2018-04-16 08:18:17
【问题描述】:
在Flow docs 关于Any 类型中,他们说使用Any 类型是不安全的,如果你这样做了,你应该尽快转换该类型的操作结果以避免Any泄漏到代码中的其他变量。此转换在下面的 let foo: number = obj.foo 行中完成。
// @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 可以是任何东西。它的属性可以有任何东西。 为什么 flow 还允许你进行上述转换? 你不能保证 foo 是一个数字,因为 obj.foo 可以是任何东西。
【问题讨论】:
-
obj未键入。因此,flow 必须确信您的显式类型注释let foo: number是正确的。你对流量有什么期望?不信任您的类型注释?如果您想要类型安全,请不要使用any。 -
是的,通过使用
any,你实际上是在告诉它去做你对它正在做的事情感到沮丧的事情。
标签: flowtype