Ich benutze PhpStorm um eine Angular App zu entwickeln und ich habe eine "nicht aufgelöste Variable" Fehler bei
params.myid
Hier ist die Codezeile:
this.route.params.subscribe((params: Params) => {
const avalancheid = params.myid;
});
Es gibt keinen Fehler, wenn ich den Typ zu ändern "irgendein" Anstatt von "Params"
this.route.params.subscribe((params: any) => {
const avalancheid = params.myid;
});
Eckige Version: 4.2.4, PhpStorm Version: 2017.2.4
Antworten:
2 für die Antwort № 1Das ist weil dein Params
Klasse enthält den Schlüssel nicht myid
, indem Sie eckige Klammern verwenden params["myid"]
Sie sollten in der Lage sein, den Wert wie in der Abbildung zu erhalten Dokumente.
Der Grund dafür ist, dass Sie dem TypeScript-Compiler "Hey, ich erwarte" sagen Params
", an dem Sie dann fortfahren, es zu sagen, um eine Eigenschaft zu nennen myid
welches das Original Params
Klasse enthält nicht, daher der Fehler.
1 für die Antwort № 2
Hier kann es zwei Probleme geben.
- Sie importieren nicht
Params
von@angular/router
:
so was:
import {Params} from "@angular/router";
Du brauchst das Params
Typ, weil es als definiert ist [key: string]: any
, die es ermöglicht, die Punktnotation zu verwenden, um durch das Objekt zu navigieren.
- Falsche Typoskript-Version:
Dieses "Erlauben" der Verwendung der Punktnation ist jedoch eine relativ neue Eigenschaft von TypeScript
. Das andere Problem könnte also sein, dass Sie eine ältere Version von TypeScript verwenden. Versuchen Sie, auf mindestens Version zu aktualisieren 2.4.x
, um diese Funktion nutzen zu können, und während Sie dabei sind. Sehen Sie, ob Sie auch auf die neueste eckige Version aktualisieren können. Das ist es wert.
Wenn Sie nicht bereit sind zu aktualisieren, obwohl ich Sie dazu ermuntere, können Sie die andere Notation verwenden, um auf die Eigenschaft zuzugreifen:
this.route.params.subscribe((params: Params) => {
const avalancheid = params["myid"];
});