Tapuscrit: définir la classe et ses méthodes dans des fichiers séparés

voix
4

Est-il possible de déclarer une classe dans un fichier et définir ses méthodes dans des fichiers séparés?

J'ai quelques cours avec beaucoup de méthodes et ce serait bien si je pouvais les étaler un peu.

Créé 03/10/2012 à 11:10
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
6

Réponse courte: Tapuscrit ne supporte pas le fractionnement d'une définition de classe en plusieurs fichiers.

Solution : Vous pouvez définir une interface contenant les membres de la classe, et deux classes différentes de mise en œuvre de cette interface. Ensuite , les propriétés mixin d'une classe à l'autre, pour faire une classe combinée. Par exemple:

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

Cela ne fonctionnera pas si vous avez besoin des constructeurs pour la classe, cependant. Et vraiment il est suboptimale ... Solution pas moins :)

Oh, en passant, cela fonctionne parce que tapuscrit ne dégage pas de déclarations de type propriété unitialised / sur le terrain pour les classes - il ne les utilise que pour la vérification de type.

Je me rends compte aussi que vous pouvez le faire sans interfaces et que la construction de la classe d'une manière plus jolie ... Je vais laisser comment faire un exercice aux lecteurs pour l'instant ...

Créé 03/10/2012 à 11:38
source utilisateur

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