javascript - Wie verwendet man Klassenvariablen in einem Objekt in TypeScript?
angenommen, ich habe eine Klasse in einer TypeScript-Datei wie unten:
export class app {
public variable1: string;
public variable2: number;
public variable3 = "Hello world"
constructor(count: number) {
this.variable1 = "something",
this.variable2 = 1 + count;
}
}
Jetzt exportiere ich diese Klasse in einer anderen Datei als:
import { app } from './directory';
let pageApp:app;
Wie kann ich jetzt hier auf die app-Variablen zugreifen?
Antwort #1
Ihre Definition der Klasse ist syntaktisch inkorrekt, kein let in Klassen und semantisch inkorrekt, Sie müssen alle Felder deklarieren:
// appClass.ts
export class app {
variable1: string // implicitly public in typescript
variable2: number
variable3 = "Hellow world"
constructor(count : number) {
this.variable1 = "something";
this.variable2 = 1 + count;
}
}
Bezüglich der Nutzung sollte der Import in Ordnung sein, aber Sie müssen die Datei importieren, in der die Klasse sich befindet (nicht das Verzeichnis, wie Ihre Importe suggerieren) und Sie müssen die Klasse instanziieren, um eine Instanz zu erstellen
import { app } from './appClass'; // notice no extension (no .js or .ts)
let pageApp:app = new app(1);
console.log(pageApp.variable2);
Antwort #2
Typischerweise wird der Begriff Klassenvariable für Variablen verwendet, die Klassenmitglieder sind, also Variablen, die auf der Klasse, aber nicht auf der Instanz existieren. Das bedeutet, dass sie existieren, bevor eine Instanz erstellt wurde.
In TypeScript werden diese Klassenvariablen mit dem static-Schlüsselwort erstellt. (Deshalb werden sie auch statische Methoden genannt.) In Ihrem Beispiel könnte nur variable1 zu einer Klassenvariable gemacht werden, da die beiden anderen Variablen Instanzmitglieder (auch Instanzvariablen genannt) sind, weil sie ihren Wert während der Instanziierung in der constructor-Methode erhalten.
Um variable1 zu einer Klassenmethode zu machen, machen Sie sie static, wie folgt:
export class app {
static variable1 = "Hello, World";
public variable2: any;
public variable3: any;
constructor(count){
this.variable1 = "something";
this.variable2 = 1 + count;
}
}
Jetzt kann darauf von der Klasse app aus zugegriffen werden, ohne dass eine Instanz erstellt wird:
console.log(app.variable1) // Hello, World
