Typoskript: define-Klasse und ihre Methoden in separaten Dateien

stimmen
4

Ist es möglich, eine Klasse in einer Datei zu erklären und ihre Methoden in separaten Dateien definieren?

Ich habe einige Klassen mit vielen Methoden und es wäre toll , wenn ich sie ein wenig ausbreiten könnte.

Veröffentlicht am 03/10/2012 um 11:10
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
6

Kurze Antwort: Typoskript unterstützt keine Spaltung eine Klassendefinition in mehrere Dateien.

Abhilfe : Sie könnten eine Schnittstelle enthält , Mitglieder für die Klasse definieren, und zwei verschiedene Klassen , die eine Schnittstelle zu implementieren. Dann mixin Eigenschaften von einer Klasse zur anderen, um eine kombinierte Klasse. Beispielsweise:

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

Das wird nicht funktionieren, wenn Sie Konstrukteuren für die Klasse benötigen, though. Und wirklich ist es suboptimal ... Behelfslösung nicht weniger :)

Oh, übrigens, das funktioniert, weil Typoskript nicht unitialised Eigenschaft / Feldtypdeklarationen für die Klassen emittiert nicht - es nutzt sie nur für die Typprüfung.

Mir ist auch klar, dass Sie dies ohne Schnittstellen tun und nur die Klassenkonstrukts in eine schönere Art und Weise ... Ich werde gehen, wie jetzt die Leser das als eine Übung zu tun ...

Beantwortet am 03/10/2012 um 11:38
quelle vom benutzer

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