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,这可能是一个解决方案。