Maszynopis wewnętrzne moduły całej kilku plików

głosy
5

Przyjąć następującą definicję klasy przy użyciu maszynopis w Animal.ts:

module Animals
{
    export class Animal { }    
}

Jeśli chcę, aby utworzyć klasę Pies w oddzielnym pliku, powiedzmy w Dog.ts przy użyciu tego kodu:

module Animals
{
    export class Dog extends Animal { }
}

nazwa „Animal” nie istnieje w bieżącym zakresie, to błąd pojawia się w definicji klasy Dog.

Dodając następującą linię do Dog.ts

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

naprawia błąd kompilacji, ale dlaczego jest to konieczne, jeśli obie klasy są zdefiniowane w ramach tego samego modułu?

Innymi słowy, chcę deklaracje moduł do span przez pliki z każdej klasy lub ubterfejsu we własnym pliku. Jest to nawet najlepsze praktyki?

Utwórz 08/10/2012 o 19:06
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
5

Przede wszystkim, jeśli skompilować obydwa pliki na raz za pomocą

tsc Animal.ts Dog.ts

wszystko będzie dobrze. Podczas kompilowania plików maszynopis, kompilator musi być świadomy tego, co faktycznie zaistniało pliki programu . Można to zrobić za pomocą odniesień źródłowych z ///lub poprzez dostarczenie wszystkich plików do kompilatora. Jest to nieco różni się od innych języków, takich jak java, które skompilować pośredniej reprezentacji i mają pojęcie CLASSPATHgdzie szukać innych plików, które są częścią programu.

Odpowiedział 08/10/2012 o 19:31
źródło użytkownik

głosy
2

/// odniesienia jest konieczne, ponieważ kompilator musi wiedzieć, gdzie zwierzę jest zdefiniowany jakoś. To nie może wiedzieć, co plik źródłowy jest w bez mówisz to, gdzie szukać.

Nie jestem pewien, że jest to najlepsza praktyka per se (musiałby wiedzieć więcej na temat aplikacji), ale trudno mi myśleć, że to anty-wzorzec więc myślę, że można czuć się swobodnie, aby to zrobić. Moduły w maszynopisie są celowo otwarte końce, aby umożliwić tego rodzaju wzoru.

Odpowiedział 08/10/2012 o 19:11
źródło użytkownik

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