Maszynopis: define klasy i jej metody w oddzielnych plikach

głosy
4

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.

Utwórz 03/10/2012 o 11:10
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
6

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

Odpowiedział 03/10/2012 o 11:38
źródło użytkownik

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