流类型注释是否在运行时包含在生产代码中?

时间:2017-06-20 19:43:26

标签: javascript reactjs flowtype react-proptypes

我对Flow有一般性质疑。

我目前使用React' prop-types library来定义组件道具类型。这些检查从生产代码中删除,因此来自外部源的数据仍然可能导致脚本崩溃。

<Foo bar={i} />

示例:假设我有一个组件Foo,它具有bar的属性,其类型为prop。在我编码时,如果我试图意外地将字符串传递给Foo的酒吧道具,我会收到通知。但是,一旦代码生效,该健全性检查就会被删除。

Flow是否保留在生产代码中?我的意思是,继续上面的例子,如果我使用Flow,如果有人试图将字符串传递给Foo的bar属性,Flow会在运行时抛出错误吗?

1 个答案:

答案 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