我有一个使用自定义'主题的React.JS项目。使用UI组件。 这个主题还提供了构建脚本(webpack配置,babel配置等)。
我想在这个项目中开始使用Flow。
我安装了所需的npm包并将flow
添加到babel的预设中,然后我将props = {mytestprop: string}
添加到我的一个React`类中。
Webpack成功编译了我的代码,但类型提示没有被删除!当然,浏览器无法执行此代码 - 当我尝试运行它时,它会引发ReferenceError: string is not defined
。
.babelrc
的当前预设列表为:["es2015", "react", "stage-2", "flow"]
。我确定这是babel使用的实际列表,因为如果删除前3个预设中的任何一个,则编译失败。
在剥离Flow类型时,您对可能导致此行为的任何想法有什么想法吗?
答案 0 :(得分:1)
不是剥离类型注释。这是{ mytestprop: string }
不是赋值右侧的有效类型注释,因为它与定义对象的语法冲突。
具体来说,当Flow的解析器看到语句{ mytestprop: string }
时,它会将此解释为尝试使用名为mytestprop
的字段创建一个对象,并将其值设置为变量{{1}的值所以它会单独保留语句,你会得到你在浏览器中看到的错误。
键入对象声明的正确方法是键入声明的左侧。
例如,
string
如果您没有单独声明道具,可以声明自定义类型:
let myProps: { myTestProp: string } = { myTestProp: "testProp" };
由于type myPropType = { myTestProp: string }
// ...
const myComponent = (props: myPropType) => //render your component
语句是Flow独有的,而不是有效的JavaScript语句,因此它将被正确剥离。