Mecanografiado módulos internos en varios archivos

votos
5

Asumir la siguiente definición de clase utilizando mecanografiado en Animal.ts:

module Animals
{
    export class Animal { }    
}

Si quiero crear una clase de perro en un archivo separado, por ejemplo en Dog.ts utilizando este código:

module Animals
{
    export class Dog extends Animal { }
}

el nombre de Animal no existe en el ámbito actual, es el error que consigo en la definición de la clase Perro.

Adición de la siguiente línea al Dog.ts

/// <reference path=Animal.ts/>

corrige el error de compilación, pero ¿por qué es necesario, si ambas clases están siendo definidas dentro del mismo módulo?

En otras palabras, quiero declaraciones del módulo a extenderse a lo largo archivos con cada clase de definición de interfaz o en su propio archivo. ¿Es esto mejor práctica?

Publicado el 08/10/2012 a las 19:06
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
5

En primer lugar, si se compila ambos archivos a la vez utilizando

tsc Animal.ts Dog.ts

todo estará bien. Al compilar archivos Letra de imprenta, el compilador tiene que estar al tanto de lo que en realidad archivos constitué el programa . Esto se puede hacer usando referencias de la fuente con ///o proporcionando todos los archivos al compilador. Esto es algo diferente a otros idiomas como el javaque compilar a una representación intermedia y tienen una noción de CLASSPATHdónde buscar otros archivos que forman parte del programa.

Respondida el 08/10/2012 a las 19:31
fuente por usuario

votos
2

El /// referencia es necesaria porque el compilador necesita saber dónde se define de alguna manera animal. No se puede saber qué archivo de origen está en sin decirle dónde buscar.

No estoy seguro de que esto es una buena práctica per se (que necesita saber más acerca de su aplicación) pero difícilmente creo que es un anti-patrón así que creo que puede sentirse libre de hacerlo. Módulos a máquina son deliberadamente un final abierto para permitir este tipo de patrón.

Respondida el 08/10/2012 a las 19:11
fuente por usuario

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