2017-01-19 8 views
18

Macht die Verwendung von React.PropTypes in einer TypeScript React Application Sinn oder ist das nur ein Fall von "Gürtel und Hosenträgern"?PropTypes in einer TypeScript React Application

Da die Komponentenklasse mit einem Props Typ-Parameter deklariert wird:

interface Props { 
    // ... 
} 
export class MyComponent extends React.Component<Props, any> { ... } 

gibt es einen wirklichen Nutzen

static propTypes { 
    myProp: React.PropTypes.string 
} 

auf die Klassendefinition hinzufügen?

Antwort

3

Ich vermute, dass in einigen chaotischen Situationen, in denen der Typ der Requisiten zur Kompilierzeit nicht abgeleitet werden kann, es sinnvoll wäre, alle Warnungen zu sehen, die durch die Verwendung von propTypes generiert wurden.

Ansonsten sehe ich keinen Vorteil (was ich, warum ich es nie persönlich benutzt habe).

22

Wenn Sie Komponenten schreiben, die von Nicht-TypeScript-Projekten wie einer Komponentenbibliothek verwendet werden sollen, können diese Projekte nicht von der PropTypes-basierten Typvalidierung profitieren.

Wenn Sie jedoch nicht machen alles, was von einem Nicht-TypeScript-Projekt verbraucht wird, ist es eine sinnlose Übung. Dies ist insbesondere der Fall, da TypeScript 2.4 die JSX-Kindtypüberprüfung unterstützt (https://github.com/Microsoft/TypeScript/issues/13618).

Denken Sie daran, dass, obwohl context als any bereitgestellt wird, contextTypes immer noch erforderlich ist, damit diese Werte an Ihre Komponente weitergegeben werden.

Ich bin interessiert zu sehen, ob es ein Tool gibt, das propTypes automatisch zur Kompilierzeit von TypScript-Schnittstellen generieren kann. Das wäre ziemlich cool.

+0

Guter Punkt. Ich werde sie weiterhin aufnehmen. – Ralph

+0

Könnten Sie bitte die erste Aussage erklären? – vehsakul

+1

@vehsakul Zur Klarstellung, wenn Sie ein Paket schreiben, das von Entwicklern installiert wird, die TypeScript nicht verwenden, benötigen sie PropTypes, um Fehler zur Laufzeit zu erhalten. Wenn Ihr Projekt nur für Sie selbst/andere TypeScript-Projekte gedacht ist, reichen die TypeScript-Schnittstellen für Ihre Requisiten aus, da das Projekt einfach nicht erstellt wird. –

Verwandte Themen