TypeScript-Fehler nach dem Upgrade von Version 4 useParams () von React-Router-Dom Eigenschaft „sumParams“ existiert nicht auf Typ „{}“

Lesezeit: 3 Minuten

Benutzer-Avatar
Yoel

Ich erhalte einen TypeScript-Fehler nach dem Upgrade auf Version 4 Wird in useParams () von React-Router-Dom verwendet

"typescript": "^4.0.2"

import { useParams } from 'react-router-dom';

const { sumParams } = useParams();

Property 'sumParams' does not exist on type '{}'. 

Das Projekt hat super funktioniert und erst nach dem Upgrade wirft es einen Fehler

Benutzer-Avatar
Yoel

useParams ist generisch. Sie müssen Typoskript mitteilen, welche Parameter Sie verwenden, indem Sie den Wert des Generikums angeben

Es gibt mehrere Möglichkeiten, dies zu lösen

Das ist mein Lieblingsweg

const { sumParams } = useParams<{ sumParams: string }>();

Aber es gibt noch ein paar mehr Möglichkeiten (:

ODER

interface ParamTypes {
  sumParams: string;
}

Dann in Ihrer Komponente

const { sumParams } = useParams<ParamTypes>();

ODER

fügen Sie einen beliebigen Typ ohne Schnittstelle hinzu

const { sumParams } : any = useParams();

Hinweis: Auf diese Weise können Sie es nicht als Zeichenfolge festlegen

ODER

Weitere Optionen für keemor:

const { sumParams } = useParams() as { 
  sumParams: string;
}

  • Wissen Sie, was sich zwischen den TS-Versionen geändert hat, um dies zu einem Fehler zu machen? Ich konnte im Änderungsprotokoll nichts finden, was darauf hindeutet, dass sich dies ändern würde.

    – mtor

    26. September 2020 um 0:30 Uhr

  • Update: Ich habe eine binäre Suche durch Typescript-Versionen auf npm durchgeführt, und dies wurde zwischen Version 4.0.0-dev.20200624 und 4.0.0-dev.20200625 zu einem Problem. Sie können die Unterschiede zwischen diesen Versionen hier überprüfen: diff.intrinsic.com/typescript/4.0.0-dev.20200624/…

    – mtor

    26. September 2020 um 1:36 Uhr

  • Danke, das habe ich getan: const { sumParams } : any = useParams(); Ich gewöhne mich noch an das Typoskript, bis jetzt sehe ich einfach keinen Vorteil darin, auf eine elegante, dynamische Sprache wie JS zugunsten des verschlungenen TS zu verzichten, aber vielleicht bekomme ich es eines Tages hin …

    – Hanke

    31. Mai 2021 um 21:53 Uhr

Eine weitere Option ist:

const { sumParams } = useParams() as { 
  sumParams: string;
}

  • Hallo @keemor, ich habe dir eine Stimme gegeben und dich auch in meiner Antwort zitiert

    – Yoel

    23. September 2020 um 14:09 Uhr


  • Es ist nicht gut, da Sie einfach eine Typaussage erzwingen. Verwenden Sie den generischen Ansatz von useParams<TS type here>() Funktion. Dadurch kann der TS-Compiler auf Ihren Typ auf der linken Seite schließen.

    – hastrb

    4. Juli um 6:26


Benutzer-Avatar
weiß

Damit es wie zuvor funktioniert, fügen Sie einfach “:any” hinzu

const { sumParams } : any = useParams();

Bei neueren Versionen des Routers wird Generic von Object zu Union of Strings geändert.

const { param1, param2 } = useParams<'param1' | 'param2'>();

Aktuell useParams tippe die ein react-router Typen sieht so aus:

export declare function useParams<Key extends string = string>(): Readonly<Params<Key>>;

Benutzer-Avatar
Shailesh Parmar

type ParamTypes {
  sumParams: string;
}

const { sumParams } = useParams<ParamTypes>()

Dies wäre der saubere Ansatz

oder

const { sumParams } = useParams<{[key: string] : string}>()

Mit diesem Ansatz können Sie beliebig viele Parameter abrufen, ohne sie einzeln deklarieren zu müssen

  • Dies ist bereits der zweite Vorschlag in der akzeptierten Antwort.

    – MEMark

    20. September 2021 um 22:56 Uhr

Benutzer-Avatar
Caleb C. Adainoo

Sie können auch auf die zugreifen params aus useRouteMatch wenn Sie es bereits in Ihre Datei importiert haben

const curRoute = useRouteMatch();
// @ts-ignore
let sumParams  = curRoute.params.sumParams

  • Dies ist bereits der zweite Vorschlag in der akzeptierten Antwort.

    – MEMark

    20. September 2021 um 22:56 Uhr

1029760cookie-checkTypeScript-Fehler nach dem Upgrade von Version 4 useParams () von React-Router-Dom Eigenschaft „sumParams“ existiert nicht auf Typ „{}“

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy