运行时生产代码中是否包含 Flow Type 注释?
Are Flow Type annotations included in production code at runtime?
我有一个关于 Flow 的一般性问题。
我目前使用 React 的 prop-types library 来定义组件属性类型。这些检查已从生产代码中删除,因此来自外部源的数据仍然有可能导致脚本崩溃。
<Foo bar={i} />
示例:假设我有一个组件 Foo,它有一个 属性 的 bar 和 prop 类型的数字。当我编码时,如果我试图不小心将字符串传递给 Foo 的 bar 属性,我会收到通知。但是,一旦代码上线,完整性检查就会被删除。
Flow 是否保留在生产代码中?我的意思是,继续上面的示例,如果我使用 Flow,如果有人试图将字符串传递给 Foo 的 bar 属性?
,Flow 会在运行时抛出错误吗
好吧,这完全取决于您的 build tools。 Flow 和 React 都不会自行删除类型注释。
React prop 类型和 Flow 之间的一个主要区别是 React prop 类型是 dynamic 而 Flow 是 static。这意味着 Flow 不会抛出任何 运行 时间错误,它会静态地进行检查。
这意味着无论环境如何,Flow 都将被设计为从任何已编译代码中剥离。
这里有一个关于如何 Babel compiles it 的演示。
如果出于某种原因,您想从开发代码本身中删除 Flow 注释,您可以使用以下方法之一:
Babel 插件:Transform Flow Strip Types
CLI 工具:Flow Remove Types
如果您正在寻找使用 Flow 语义的动态类型检查,请查看 flow-runtime。
我有一个关于 Flow 的一般性问题。
我目前使用 React 的 prop-types library 来定义组件属性类型。这些检查已从生产代码中删除,因此来自外部源的数据仍然有可能导致脚本崩溃。
<Foo bar={i} />
示例:假设我有一个组件 Foo,它有一个 属性 的 bar 和 prop 类型的数字。当我编码时,如果我试图不小心将字符串传递给 Foo 的 bar 属性,我会收到通知。但是,一旦代码上线,完整性检查就会被删除。
Flow 是否保留在生产代码中?我的意思是,继续上面的示例,如果我使用 Flow,如果有人试图将字符串传递给 Foo 的 bar 属性?
,Flow 会在运行时抛出错误吗好吧,这完全取决于您的 build tools。 Flow 和 React 都不会自行删除类型注释。
React prop 类型和 Flow 之间的一个主要区别是 React prop 类型是 dynamic 而 Flow 是 static。这意味着 Flow 不会抛出任何 运行 时间错误,它会静态地进行检查。
这意味着无论环境如何,Flow 都将被设计为从任何已编译代码中剥离。
这里有一个关于如何 Babel compiles it 的演示。
如果出于某种原因,您想从开发代码本身中删除 Flow 注释,您可以使用以下方法之一:
Babel 插件:Transform Flow Strip Types
CLI 工具:Flow Remove Types
如果您正在寻找使用 Flow 语义的动态类型检查,请查看 flow-runtime。