Bei Verwendung von TypeScript mit React müssen wir nicht mehr erweitern React.Props, damit der Compiler weiß, dass alle Requisiten von React- Komponenten untergeordnete Elemente haben können:
interface MyProps { }
class MyComponent extends React.Component<MyProps, {}> {
public render(): JSX.Element {
return <div>{this.props.children}</div>;
}
}
Bei zustandslosen Funktionskomponenten scheint dies jedoch nicht der Fall zu sein:
const MyStatelessComponent = (props: MyProps) => {
return (
<div>{props.children}</div>
);
};
Gibt den Kompilierungsfehler aus:
Fehler: (102, 17) TS2339: Die Eigenschaft 'children' ist für den Typ 'MyProps' nicht vorhanden.
Ich denke, das liegt daran, dass der Compiler wirklich nicht wissen kann, dass childrenim Requisitenargument eine Vanillefunktion angegeben wird.
Die Frage ist also, wie wir Kinder in einer zustandslosen Funktionskomponente in TypeScript verwenden sollen.
Ich könnte zum alten Weg zurückkehren MyProps extends React.Props, aber die PropsBenutzeroberfläche ist als veraltet markiert , und zustandslose Komponenten haben oder unterstützen kein, Props.refwie ich es verstehe.
So konnte ich die childrenRequisite manuell definieren :
interface MyProps {
children?: React.ReactNode;
}
Erstens: Ist ReactNodeder richtige Typ?
Zweitens: Ich muss Kinder als optional ( ?) schreiben, sonst denken die Verbraucher, dass childrendies ein Attribut der Komponente ( <MyStatelessComponent children={} />) sein soll, und lösen einen Fehler aus, wenn kein Wert angegeben wird.
Es scheint, als würde mir etwas fehlen. Kann jemand Klarheit darüber schaffen, ob mein letztes Beispiel die Verwendung zustandsloser Funktionskomponenten mit Kindern in React ist?
@types