Definitelytyped: React-Router: `withRouter` schlägt mit` ComponentType` ab 3.6.2 fehl

Erstellt am 10. Sept. 2019  ·  10Kommentare  ·  Quelle: DefinitelyTyped/DefinitelyTyped

Dies funktionierte in 3.5.2, schlägt jedoch in 3.6.2 fehl.

strict Modus

Ist dies ein Fehler in der Eingabe oder in TypeScript?

Ich habe hier fehlgeschlagene Tests hinzugefügt: https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f036856dfc9a7fd140f378402c102206738ec0a4.

import * as React from 'react';

// Copied from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/5db94ca7fd3570dc23588b404d7bb669a7886a8a/types/react-router/index.d.ts#L146
declare function withRouter<P, C extends React.ComponentType<P>>(
    component: C & React.ComponentType<P>,
): unknown;

declare const Component: React.ComponentType<{}>;
/*
Argument of type 'ComponentType<{}>' is not assignable to parameter of type 'ComponentClass<{}, any> | (ComponentClass<{}, any> & FunctionComponent<{}>)'.
  Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any> | (ComponentClass<{}, any> & FunctionComponent<{}>)'.
    Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any> & FunctionComponent<{}>'.
      Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any>'.
        Type 'FunctionComponent<{}>' provides no match for the signature 'new (props: {}, context?: any): Component<{}, any, any>'.
*/
withRouter(Component);

Wenn Sie wissen, wie Sie das Problem beheben können, stellen Sie stattdessen eine Pull-Anfrage.

  • [x] Ich habe versucht, das Paket @types/xxxx , und hatte Probleme.
  • [x] Ich habe versucht, die neueste stabile Version von tsc zu verwenden. https://www.npmjs.com/package/typescript
  • [x] Ich habe eine Frage, die für StackOverflow ungeeignet ist. (Bitte stellen Sie dort entsprechende Fragen).
  • [x] [Erwähnung] (https://github.com/blog/821-mention-somebody-they-re-notified) die Autoren (siehe Definitions by: in index.d.ts ), damit sie können reagieren.

    • Autoren: @ sergey-buturlakin @ mrk21 @ vasek17 @ngbrown @awendland @KostyaEsmukov @johnnyreilly @LKay @DovydasNavickas @ Huy-nguyen @grmiade @DaIgeb @egorshulga @rraina @ pret-a-porter @ t49tran @ 8enSmith @wezleytsai @ eps1lon @HipsterBrown

Wenn Sie die Autoren nicht erwähnen, wird das Problem ignoriert.

Bug

Hilfreichster Kommentar

Ich sehe immer noch Probleme, auch nach diesem Fix. Fehlermeldung ist so etwas wie

 Argument of type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to parameter of type 'ComponentType<RouteComponentProps<{}, StaticContext, any>>'.
  Type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to type 'FunctionComponent<RouteComponentProps<{}, StaticContext, any>>'.
    Types of parameters '__0' and 'props' are incompatible.
      Type 'PropsWithChildren<RouteComponentProps<{}, StaticContext, any>>' is not assignable to type 'RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }'.
        Property 'myProp' is missing in type 'RouteComponentProps<{}, StaticContext, any> & { children?: ReactNode; }' but required in type '{ myProp: boolean; }'.

mit der Komponente definiert als

import { RouteComponentProps, withRouter } from "react-router-dom";

interface Props extends RouteComponentProps {
  myProp: boolean;
}

const Component = ({ myProp, match }: Props) => null

export default withRouter(Component);

Ich benutze

typescript: 3.6.3
@types/react-router: 5.0.4

Alle 10 Kommentare

Ich werde keine Zeit haben, mich damit zu beschäftigen. Ich denke, wir sollten einfach jede Verwendung von ComponentType entfernen und einfache Funktionen mit expliziten Requisiten in Bezug auf ref und children . ComponentType war wegen der Gewerkschaft immer ein bisschen problematisch. Wenn es keine Fehler verursachte, produzierte es sehr große Gewerkschaften mit anderen Hocs. Bibliothekskonsumenten sollten die Statik sowieso nicht berühren, daher sollte es kein Problem sein, diese zu verlieren.

Habe das gleiche Problem. Bereits über das React-Router-Repo berichtet (https://github.com/ReactTraining/react-router/issues/6906), wurde aber hierher weitergeleitet.

Ich sehe immer noch Probleme, auch nach diesem Fix. Fehlermeldung ist so etwas wie

 Argument of type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to parameter of type 'ComponentType<RouteComponentProps<{}, StaticContext, any>>'.
  Type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to type 'FunctionComponent<RouteComponentProps<{}, StaticContext, any>>'.
    Types of parameters '__0' and 'props' are incompatible.
      Type 'PropsWithChildren<RouteComponentProps<{}, StaticContext, any>>' is not assignable to type 'RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }'.
        Property 'myProp' is missing in type 'RouteComponentProps<{}, StaticContext, any> & { children?: ReactNode; }' but required in type '{ myProp: boolean; }'.

mit der Komponente definiert als

import { RouteComponentProps, withRouter } from "react-router-dom";

interface Props extends RouteComponentProps {
  myProp: boolean;
}

const Component = ({ myProp, match }: Props) => null

export default withRouter(Component);

Ich benutze

typescript: 3.6.3
@types/react-router: 5.0.4

@ karol-majewski Ich bin auf TS 3.6.3 und die neueste Version @types/react-router: 5.0.4 bricht, während die Rückkehr zur früheren Version in Ordnung ist.

export function withRouter<P extends RouteComponentProps<any>, C extends React.ComponentType<P>>(
  component: C & React.ComponentType<P>,
): React.ComponentClass<Omit<P, keyof RouteComponentProps<any>> & WithRouterProps<C>> & WithRouterStatics<C>;

Ich ermutige alle, neue Themen zu eröffnen. Wenn wir Ihr spezielles Problem beheben, können Sie nicht benachrichtigt werden, wenn Sie nur in einem geschlossenen Thread kommentieren. Der Typoskript-Spielplatz ermöglicht jetzt die Konfiguration der ts-Version + Konfiguration und kann Typdefinitionen herunterladen. Das Einfügen eines Links in eine neue Ausgabe hilft den Betreuern sehr. Danke: bete:

Es scheint, als würde dies nur mit strictFunctionTypes und ich habe eine Lösung im Sinn. Wir werden sehen, ob es klappt.

@sandersn Können wir dies erneut öffnen, da der Fix zurückgesetzt wurde ?

IIRC, @ eps1lon hat festgestellt, dass dies auf einen TypeScript-Fehler zurückzuführen ist: https://github.com/microsoft/TypeScript/issues/33490

Die Korrektur erfolgt in: https://github.com/microsoft/TypeScript/pull/34607.

Funktioniert gut mit der nächtlichen Version. Spielplatz Link

Typoskript ist Zeitverschwendung. Ich habe Stunden damit verbracht, diesen dummen Fehler und nichts zu lösen. Wenn also Typoskript gemacht wird, um das Leben einfacher zu machen, macht es definitiv nicht den Job, voller Fehler und Bugs

Dieses Problem wurde in TS 3.7 behoben. Schließen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen