/ / PhpStorm Angular subscribe - nicht aufgelöste Variable - javascript, angularjs, angular, phpstorm

PhpStorm Angular subscribe - nicht aufgelöste Variable - javascript, angularjs, angular, phpstorm

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 № 1

Das 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.

  1. 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.

  1. 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"];
});