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