Est-ce que l'utilisation a du React.PropTypes
sens dans une application TypeScript React ou est-ce juste un cas de «ceinture et bretelles»?
Puisque la classe de composant est déclarée avec un Props
paramètre de type:
interface Props {
// ...
}
export class MyComponent extends React.Component<Props, any> { ... }
y a-t-il un réel avantage à ajouter
static propTypes {
myProp: React.PropTypes.string
}
à la définition de classe?
Typescript et PropTypes ont des objectifs différents. Typescript valide les types au moment de la compilation , tandis que les PropTypes sont vérifiés à l' exécution .
Typescript est utile lorsque vous écrivez du code: il vous avertira si vous passez un argument du mauvais type à vos composants React, vous donnera la saisie semi-automatique pour les appels de fonction, etc.
Les propTypes sont utiles lorsque vous testez la façon dont les composants interagissent avec des données externes, par exemple lorsque vous chargez JSON à partir d'une API. PropTypes vous aidera à déboguer (en mode Développement de React) pourquoi votre composant échoue en imprimant des messages utiles comme:
Même s'il peut sembler que Typescript et PropTypes font la même chose, ils ne se chevauchent pas du tout. Mais il est possible de générer automatiquement des PropTypes à partir de Typescript afin de ne pas avoir à spécifier deux fois les types, voir par exemple:
la source
Je suppose que dans certaines situations désordonnées où le type d'accessoires ne peut pas être déduit au moment de la compilation, il serait utile de voir tous les avertissements générés par l'utilisation
propTypes
au moment de l'exécution.Une telle situation serait lors du traitement de données à partir d'une source externe pour laquelle les définitions de type ne sont pas disponibles, comme une API externe indépendante de votre volonté. Pour les API internes, je pense que cela vaut la peine d'écrire (ou mieux, de générer) des définitions de type, si elles ne sont pas déjà disponibles.
A part ça, je ne vois vraiment aucun avantage (c'est pourquoi je ne l'ai jamais utilisé personnellement).
la source