Is het mogelijk om een klasse te verklaren in één bestand en zijn methoden te definiëren in afzonderlijke bestanden?
Ik heb een aantal klassen met veel van methoden en het zou geweldig zijn als ik hen kon een beetje verspreid.
Is het mogelijk om een klasse te verklaren in één bestand en zijn methoden te definiëren in afzonderlijke bestanden?
Ik heb een aantal klassen met veel van methoden en het zou geweldig zijn als ik hen kon een beetje verspreid.
Kort antwoord: Typescript ondersteunt geen opsplitsing een klasse definitie in verschillende bestanden.
Tijdelijke oplossing : Je zou een interface met de leden van de klasse te definiëren, en twee verschillende klassen de uitvoering van die interface. Dan mixin eigenschappen van de ene klasse naar de andere, om een gecombineerde klasse te maken. Bijvoorbeeld:
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];
}
Dit zal niet werken als je constructeurs nodig hebt voor de klas, dat wel. En echt het is niet optimaal ... Oplossing niettemin :)
Oh, trouwens, dit werkt omdat typoscript zendt geen unitialised woningtype / veld verklaringen voor de klassen - het alleen gebruikt ze voor type checking.
Ik realiseer me ook dat je dit kan doen zonder interfaces en gewoon de klasse construct in een mooier manier ... laat ik hoe dat te doen als een oefening voor de lezers voor nu ...