Ich übergebe eine Komponente als Requisite.
Dies ist wie folgt definiert.
%Vor%Das funktioniert gut, aber ich möchte diese Definition aktualisieren, um zu sagen, dass zumindest über Requisiten bestehen sollte, aber um zusätzliche Requisiten zu erlauben.
Gibt es eine Definition, die ich dafür verwenden kann? Zum Beispiel möchte ich, dass eine Komponente mit der folgenden Signatur akzeptiert wird.
%Vor%Ich habe versucht, sie als Schnittstelle zu definieren, aber sie werden immer noch abgelehnt.
%Vor%Aktualisieren
Ich denke, das die Probleme demostrates Ich habe Link-
Update 2
@Rajesh ‚s Lösung scheint nicht zu funktionieren, haben hier versucht
Was ich in solchen Fällen getan habe, ist Props
als eine Vereinigung von TableProps
und pro-Komponenten-Requisiten zu definieren:
In diesem Fall würde ich TableProps
als Objekttyp beibehalten, nicht als Schnittstelle.
Es ist auch möglich, Schnittstellen zu verwenden, wenn sowohl TableProps
als auch Props
als Schnittstellen wie folgt definiert sind:
Ich denke, Flow könnte es leichter haben mit der Schnittstellenlösung. Aber ich habe keine besonderen Beweise, um diese Vermutung zu stützen.
Das Problem läuft tiefer als es scheint. Es ist etwas gekünstelt, kann aber durch Anonymisierung der Typnamen hervorgehoben werden, wie hier getan.
%Vor%Der obige Code erzeugt den folgenden Fehler.
%Vor%g
vom Typ FooFn
einem Wert f
. f
gibt ihr den Typ (Bar) => any
. FooFn
ist wirklich nur (Foo) => any
. Das verursacht das Problem: Der LHS-Typ ist nicht derselbe wie der RHS-Typ. Wir können sagen, dass g
erweitert f
, in der Weise, dass g
ein Argument die Erweiterung f
übernimmt. Diese Art der Beziehung wird Kontravarianz genannt. Sie können mehr darüber hier lesen. Ich würde auch empfehlen, einen Teil von einem Vortrag <8:12 bis 09:10 zu sehen.
Um ehrlich zu sein, kann Flow keine kontravarianten Beziehungen erfassen (siehe hier und hier ).
Nicht viel, wirklich. Alle Optionen, die Sie haben, sind unangenehm, um es gelinde auszudrücken.
Unterdrückt den Fluss mit // $FlowFixMe
comments (siehe hier ).
Definieren Sie Ihre Funktionen f
und g
so, dass sie nicht kontravariant sind (kann schwierig sein, kann sogar unmöglich sein).
Deklarieren Sie Ihre Typen unabhängig voneinander, d. h. D o R Wiederholen Sie Y selbst.
Probieren Sie einen Hack aus, der die Verwendung eines statischen Typprüfers als , der von Tom beantwortet wurde, untergräbt und wie hier getan.
Ihr Anruf.
Tags und Links javascript reactjs flowtype