javascript - Hur man använder klassvariabler i objekt i TypeScript?


antag att jag har en klass i en TypeScript-fil som nedan:

export class app {
  public variable1: string;
  public variable2: number;
  public variable3 = "Hello world"
  constructor(count: number) {
      this.variable1 = "something",
      this.variable2 = 1 + count;
   }

}

nu i en annan fil exporterar jag den här klassen som:

import { app } from './directory';
let pageApp:app;

nu, hur kan jag komma åt app-variabler här?

Svar #1

Din definition av klassen är syntaktiskt felaktig, inget let i klasser och semantiskt felaktig, du måste deklarera alla fält:

// 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;
    }

} 

När det gäller användning bör importen vara okej, men du behöver importera filen där klassen finns (inte katalogen som dina importer antyder) och du behöver skapa en ny instans av klassen för att skapa ett objekt

import { app } from './appClass'; // notice no extension (no .js or .ts)
let pageApp:app = new app(1);
console.log(pageApp.variable2);

Svar #2

Vanligtvis används termen klassvariabel för variabler som är klassmedlemmar, dvs. variabler som finns på klassen, men inte på instansen. Det betyder att de existerar innan någon instans har skapats.

I TypeScript skapas dessa klassvariabler med nyckelordet static. (Detta är anledningen till att de också kallas statisk metoder.) I ditt exempel kunde endast variable1 göras till en klassvariabel, eftersom de andra två variablerna är instansmedlemmar (även kallade instansvariabler), eftersom de får sitt värde vid instansiering - i constructor-metoden.

För att göra variable1 till en klassmetod, gör den static, på följande sätt:

export class app {
   static variable1 = "Hello, World";

   public variable2: any;
   public variable3: any;

  constructor(count){
      this.variable1 = "something";
      this.variable2 = 1 + count;
   }
}

Nu kan det adresseras från klassen app, utan någon instansiering:

console.log(app.variable1)  // Hello, World

Relaterade artiklar