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