¿Es posible declarar una clase en un archivo y definir sus métodos en archivos separados?
Tengo algunas clases con una gran cantidad de métodos y sería genial si pudiera extenderse hacia fuera un poco.
¿Es posible declarar una clase en un archivo y definir sus métodos en archivos separados?
Tengo algunas clases con una gran cantidad de métodos y sería genial si pudiera extenderse hacia fuera un poco.
Respuesta corta: Letra de imprenta no admite la división de una definición de clase en varios archivos.
Solución alternativa : Se podría definir una interfaz que contiene los miembros de la clase, y dos clases diferentes de incorporación de dicha interfaz. Entonces mixin propiedades de una clase a la otra, para hacer una clase combinada. Por ejemplo:
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];
}
Esto no funcionará si necesita constructores de la clase, sin embargo. Y realmente es subóptima ... Solución sin embargo :)
Ah, por cierto, esto funciona porque mecanografiado no emite declaraciones de tipo de propiedad / terreno unitialised para las clases - que sólo los utiliza para la comprobación de tipos.
También me di cuenta de que se puede hacer esto sin interfaces y sólo la construcción de clases de una forma más bonita ... Dejaré cómo hacerlo como un ejercicio para los lectores por ahora ...