Dattiloscritto moduli interni in più file

voti
5

Assumere la seguente definizione di classe utilizzando dattiloscritto in Animal.ts:

module Animals
{
    export class Animal { }    
}

Se voglio creare una classe Cane in un file separato, dire in Dog.ts utilizzando questo codice:

module Animals
{
    export class Dog extends Animal { }
}

il nome di Animal non esiste nell'ambito corrente, è l'errore che ottengo nella definizione della classe Dog.

Aggiungendo la seguente linea a Dog.ts

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

corregge l'errore di compilazione, ma il motivo per cui è necessario, se entrambe le classi si stanno definendo all'interno dello stesso modulo?

In altre parole, voglio dichiarazioni del modulo per coprono i file con ciascuna classe o definizione di interfaccia nel proprio file attraverso. È questa anche la pratica migliore?

È pubblicato 08/10/2012 alle 19:06
fonte dall'utente
In altre lingue...                            


2 risposte

voti
5

Prima di tutto, se si compila entrambi i file in una sola volta utilizzando

tsc Animal.ts Dog.ts

tutto andrà bene. Quando la compilazione dei file Carattere tipografico, il compilatore ha bisogno di essere messo al corrente di quali file in realtà caso devono il programma . Questo può essere fatto utilizzando i riferimenti alle origini con ///o fornendo tutti i file al compilatore. Questo è un po 'diverso da altri linguaggi come java, che compilare a una rappresentazione intermedia e hanno una nozione di CLASSPATHdove cercare altri file che fanno parte del programma.

Risposto il 08/10/2012 a 19:31
fonte dall'utente

voti
2

Il /// di riferimento è necessaria perché il compilatore ha bisogno di sapere dove Animal è definito in qualche modo. Non può sapere che cosa file di origine che è in senza dirti dove andare a cercare.

Non sono sicuro che questa è una pratica migliore per sé (avrebbe bisogno di sapere di più sulla tua applicazione), ma non credo che sia un anti-modello quindi penso che si può sentire liberi di farlo. I moduli a macchina sono deliberatamente Open Ended per consentire questo tipo di modello.

Risposto il 08/10/2012 a 19:11
fonte dall'utente

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