PropTypes和Flow涵盖了类似的内容,但是使用的是不同的方法。PropTypes可以在运行时向您发出警告,这有助于快速找到来自服务器等的格式错误的响应。但是,Flow似乎是未来,并且泛型等概念是非常灵活的解决方案。另外,Nuclide提供的自动补全功能对Flow来说是一大优势。
现在我的问题是,开始新项目时哪种方法最好。还是同时使用Flow和PropTypes是一个好的解决方案?使用两者的问题是您编写了大量重复的代码。这是我编写的音乐播放器应用程序的示例:
export const PlaylistPropType = PropTypes.shape({
next: ItemPropTypes,
current: ItemPropTypes,
history: PropTypes.arrayOf(ItemPropTypes).isRequired
});
export type Playlist = {
next: Item,
current: Item,
history: Array<Item>
};
这两个定义基本上都包含相同的信息,并且当更改数据类型时,两个定义都需要更新。
我发现这个babel插件可以将类型声明转换为PropTypes,这可能是一个解决方案。
尝试仅使用Flow声明道具的类型。指定错误的类型,例如数字而不是字符串。您会看到,这将在使用Flow感知编辑器中使用该组件的代码中进行标记。但是,这不会导致任何测试失败,并且您的应用仍然可以运行。
现在添加使用带有错误类型的React PropTypes。运行该应用程序时,这将导致测试失败并在浏览器控制台中被标记。
基于此,似乎即使正在使用Flow,也应该指定PropTypes。