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