2017-02-04 4 views
6

diesen Code:Argument des Typs 'Element' ist nicht zuordenbare Parameter des Typs ‚ReactElement <any>

import * as React from 'react';                        

const Component =() => <div/>;             

function culprit<P>(node: React.ReactElement<P>) { 
    console.log(node); 
} 

culprit(<Component/>); 

... erzeugt diese Kompilierungsfehler, wenn sie mit Typoskript Kompilieren:

error TS2345: Argument of type 'Element' is not assignable to parameter of type 'ReactElement<any>'. 
    Type 'null' is not assignable to type 'ReactElement<any> 

Dieses nur passiert, wenn die strictNullChecks Typoskript Kompilierung-Flag auf true gesetzt.

Ja, ich könnte das Flag deaktivieren, aber ich will es auf für zusätzliche Übersetzungszeit/Sicherheit zu überprüfen.

Wenn ich die letzte Zeile, um diese Änderung:

culprit((<Component/> as React.ReactElement<any>)); 

... es funktioniert mit der Flagge auf true gesetzt.

Ich habe kürzlich versucht, in einem React-Projekt von "normalem" JavaScript zu TypeScript zu migrieren, was alle meine Tests austricksen lässt. Das Hinzufügen all dieser TypeScript-Assertions zu all diesen Vorkommen im Testcode wird ein Schmerz sein.

Ist das ein Bug oder habe ich keine andere Wahl? Diese

Antwort

9

ist offenbar ein Thema, das in den 15.0.5 eingeführt wurde Reagieren Typdefinitionen. Wenn Sie zu 15.0.4 wechseln, sollte alles in Ordnung sein.

dieses Problem Siehe: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/14284

+0

Ich habe 'versucht @ Typen/react' Versionen 15.0.6, 15.0.4, 15.0.0 und alle von ihnen nach wie vor das Problem für mich produzieren, leider. – pleasedesktop

+0

Version 0.14.57 funktioniert, aber das war vor dem Union-Typ mit '| null wurde eingeführt (was Sie anscheinend versucht haben, mich zu bekommen). Dennoch reagieren soll, um Funktionen erlauben zu machen null zurück, so dass ich glaube nicht, das Reagieren Typ-Definition falsch ist, glaube ich, alle Typdefinitionen, die für 'null' nicht erlaubt haben, müssen aktualisiert. Ich habe diese "Schuld" -Funktionssignatur von Enzyme.js erhalten, so dass ihre Typdefinitionen aktualisiert werden müssen. – pleasedesktop

+0

15.0.4 behebt mein Problem, aber ich denke, Sie müssen etwas anderes tun (oder etwas anderes in Ihrem Setup haben). –

Verwandte Themen