Carattere tipografico: definire classe ed i suoi metodi in file separati

voti
4

E 'possibile dichiarare una classe in un unico file e definire i suoi metodi in file separati?

Ho alcune classi con un sacco di metodi e sarebbe bello se potessi sparsi un po '.

È pubblicato 03/10/2012 alle 11:10
fonte dall'utente
In altre lingue...                            


1 risposte

voti
6

Risposta breve: Carattere tipografico non supporta frazionamento una definizione di classe in più file.

Soluzione : Si può definire un'interfaccia contenente i membri della classe, e due classi diverse di attuazione tale interfaccia. Poi mixin proprietà da una classe all'altra, a fare una classe combinato. Per esempio:

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

Questo non funzionerà se avete bisogno di costruttori per la classe, però. E davvero è ottimale ... Soluzione comunque :)

Oh, a proposito, questo funziona perché dattiloscritto non emette dichiarazioni Tipo di proprietà / campo unitialised per le classi - li usa solo per il tipo di controllo.

Mi rendo anche conto che si può fare questo senza interfacce e solo il costrutto di classe in un modo più bello ... Lascio come fare come esercizio per i lettori, per ora ...

Risposto il 03/10/2012 a 11:38
fonte dall'utente

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