Loggfila: definere klasse og dens metoder i separate filer

stemmer
4

Er det mulig å erklære en klasse i én fil og definere sine metoder i separate filer?

Jeg har noen klasser med mye av metoder, og det ville være flott om jeg kunne spre dem ut litt.

Publisert på 03/10/2012 klokken 10:10
kilden bruker
På andre språk...                            


1 svar

stemmer
6

Kort svar: Loggfila støtter ikke splitte opp en klassedefinisjon i flere filer.

Løsning : Du kan definere et grensesnitt som inneholder medlemmer for klassen, og to forskjellige klasser som implementerer dette grensesnittet. Deretter -mixinen egenskaper fra en klasse til den andre, for å lage en kombinert klasse. For eksempel:

LargeClass.a.ts

interface LargeClass {
   methodA(): string;
   methodB(): string;
}

class LargeA implements LargeClass {
   methodA: () => string; // not implemented, needed since otherwise we don't extend LargeClass
   methodB() {
     return "Hello world";
   }
}

LargeClass.b.ts

class LargeB implements LargeClass {
   methodA() {
     return "Foo";
   }
   methodB: () => string; // not implemented, needed since otherwise we don't extend LargeClass
}

Usage.ts

// Using underscore's extend to copy implementation from A to B
var c:LargeClass = _.extend(new LargeA(), new LargeB());

// Manually mixing in a to b
var a = new LargeA();
var b:LargeClass = new LargeB();
for (var prop in a) {
    b[prop]=a[prop];
}

Dette vil ikke fungere hvis du trenger konstruktører for klassen, skjønt. Og egentlig er det suboptimal ... Løsning ingen av mindre :)

Oh, forresten, dette fungerer fordi Loggfila ikke avgir unitialised eiendom / felttype erklæringer for klasser - den bare bruker dem for type sjekking.

Jeg skjønner at du kan gjøre dette uten grensesnitt og bare klassen konstruere i en penere måte ... Jeg vil forlate hvordan å gjøre det som en øvelse til lesere for nå ...

Svarte 03/10/2012 kl. 10:38
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more