Typescript: definesc clasă și metodele sale în fișiere separate

voturi
4

Este posibil să declare o clasă într-un fișier și să definească metodele sale în fișiere separate?

Am niște clase cu o mulțime de metode și ar fi grozav dacă aș putea să le răspândească un pic.

Întrebat 03/10/2012 la 11:10
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
6

Răspuns scurt: typescript nu acceptă împărțirea unei definiții de clasă în mai multe fișiere.

Soluție : Ai putea defini o interfață care conține membri pentru clasa, și două clase diferite de punere în aplicare această interfață. Apoi mixin proprietăți de la o clasă la alta, pentru a face o clasă combinată. De exemplu:

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

Acest lucru nu va funcționa dacă aveți nevoie de constructori pentru clasa, totuși. Și într-adevăr este suboptimal ... Workaround totuși :)

Oh, apropo, acest lucru funcționează deoarece dactilografiat nu emite declarații de tip proprietate / teren unitialised pentru clasele - le folosește doar pentru tipul de verificare.

De asemenea, am dat seama că pot face acest lucru fără interfețe și doar constructul de clasă într-un mod mai frumos ... Voi lăsa cum să fac asta ca un exercițiu pentru cititorii de acum ...

Publicat 03/10/2012 la 11:38
sursa de către utilizator

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