我对Flow有一般性质疑。
我目前使用React' prop-types library来定义组件道具类型。这些检查从生产代码中删除,因此来自外部源的数据仍然可能导致脚本崩溃。
<Foo bar={i} />
示例:假设我有一个组件Foo,它具有bar的属性,其类型为prop。在我编码时,如果我试图意外地将字符串传递给Foo的酒吧道具,我会收到通知。但是,一旦代码生效,该健全性检查就会被删除。
Flow是否保留在生产代码中?我的意思是,继续上面的例子,如果我使用Flow,如果有人试图将字符串传递给Foo的bar属性,Flow会在运行时抛出错误吗?
答案 0 :(得分:5)
嗯,这一切都取决于你的build tools。 Flow和React都不会自行删除类型注释。
React prop类型和Flow之间的一个主要区别是React prop类型是动态,而Flow是 static 。这意味着Flow不会抛出任何运行时错误,它会静态执行检查。
这意味着无论环境如何,Flow都会从任何已编译的代码中删除。
这是关于如何Babel compiles it的演示。
如果由于某种原因,您想从开发代码本身中删除Flow注释,则可以使用以下方法之一:
Babel插件:Transform Flow Strip Types
CLI工具:Flow Remove Types
如果您正在使用Flow语义查找动态类型检查,请结帐flow-runtime。