输入未被巴贝尔

时间:2017-04-26 00:00:57

标签: node.js reactjs webpack babel flowtype

我有一个使用自定义'主题的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类型时,您对可能导致此行为的任何想法有什么想法吗?

1 个答案:

答案 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语句,因此它将被正确剥离。