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

mrb*_*000 2 javascript reactjs flowtype react-proptypes

我有一个关于Flow的一般问题.

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

<Foo bar={i} />
Run Code Online (Sandbox Code Playgroud)

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

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

nem*_*035 5

嗯,这一切都取决于你的构建工具.Flow和React都不会自行删除类型注释.

React prop类型和Flow之间的一个主要区别是React prop类型是动态的,而Flow是静态的.这意味着Flow不会抛出任何运行时错误,它会静态地进行检查.

这意味着无论环境如何,Flow都将从任何已编译的代码中删除.

这是关于Babel如何编译它的演示.

如果由于某种原因,您想从开发代码本身中删除Flow注释,则可以使用以下方法之一:

Babel插件:转换流条类型

CLI工具:流程删除类型

如果您正在使用Flow语义查找动态类型检查,请检查flow-runtime.