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