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>
};
どちらの定義にも基本的に同じ情報が含まれており、データ型が変更された場合は、両方の定義を更新する必要があります。
型宣言をPropTypesに変換するこのbabelプラグインを見つけました。これは解決策かもしれません。