Czy jest możliwe aby zadeklarować klasę w jednym pliku i określić swoje metody w oddzielnych plikach?
Mam kilka klas z wielu metod i byłoby wspaniale, gdybym mógł rozłożyć nieco.
Czy jest możliwe aby zadeklarować klasę w jednym pliku i określić swoje metody w oddzielnych plikach?
Mam kilka klas z wielu metod i byłoby wspaniale, gdybym mógł rozłożyć nieco.
Krótka odpowiedź: Maszynopis nie obsługuje dzielenie się definicję klasy na kilka plików.
Obejście : Można zdefiniować interfejs zawierający członków do tej klasy, a dwie różne klasy implementujące ten interfejs. Następnie wstawek właściwości z jednej grupy do drugiej, aby połączony klasy. Na przykład:
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];
}
To nie będzie działać, jeśli trzeba konstruktorów w klasie, choć. I naprawdę to suboptimal ... Obejście niemniej :)
Aha, przy okazji, to działa, ponieważ nie emituje maszynopis deklaracje typu nieruchomość / pole unitialised dla klas - to tylko wykorzystuje je dla typu kontroli.
Ja też sobie sprawę, że można to zrobić bez interfejsów i tylko konstruktem klasy w ładniejszej sposób ... Zostawię jak to zrobić jako ćwiczenie dla czytelników do teraz ...