PropTypes e Flow cobrem coisas semelhantes, mas usam abordagens diferentes. Os PropTypes podem fornecer avisos durante o tempo de execução, o que pode ser útil para encontrar rapidamente respostas malformadas vindas de um servidor, etc. No entanto, o Flow parece ser o futuro e com conceitos como genéricos é uma solução muito flexível. Além disso, o preenchimento automático oferecido pela Nuclide é uma grande vantagem para o Flow.
Minha dúvida agora é qual é o melhor caminho a seguir, ao iniciar um novo projeto. Ou poderia ser uma boa solução para usar ambos, Flow e PropTypes? O problema de usar ambos é que você escreve muitos códigos duplicados. Este é um exemplo de um aplicativo reprodutor de música que escrevi:
export const PlaylistPropType = PropTypes.shape({
next: ItemPropTypes,
current: ItemPropTypes,
history: PropTypes.arrayOf(ItemPropTypes).isRequired
});
export type Playlist = {
next: Item,
current: Item,
history: Array<Item>
};
Ambas as definições contêm basicamente as mesmas informações e quando o tipo de dados é alterado, ambas as definições precisam ser atualizadas.
Eu encontrei este plugin babel para converter declarações de tipo em PropTypes, o que pode ser uma solução.