2016-04-08 8 views
13

W starych wersjach maszynopis został on wymagany, aby dodać słynnyMaszynopis. Są odniesieniami Triple Slash nadal potrzebne do korzystania z „Importuj z”

/// <reference 

etykietę, aby dodać wymagane referencje. Teraz po wersji 1,6 możemy importować zależności stosując zalecaną ES6 sposób

import Greeter from "./greeter"; 

Czytałem na chwilę, ale to nadal nie jest dla mnie jasne, czy i dlaczego odniesienia triple-slash należy całkowicie unikać lub nie.

BTW. Czy teraz kompilator wie, w jakiej kolejności ma skompilować pliki TS, jeśli używamy filesGlob zamiast files w tsconfig.json?

+0

Jeśli chcesz pisać moduły es6/amd/commonjs - użyjesz importu. Jeśli chcesz mieć projekt pojedynczego pliku - możesz użyć przestrzeni nazw i odniesienia. – lujcon

Odpowiedz

3

Po pierwsze, nie wierzę filesGlob jest jeszcze oficjalnie obsługiwane: https://github.com/Microsoft/TypeScript/issues/1927

Teraz miarę potrójnej odniesienia slash, to nie jest konieczne tak długo, jak wszystko odwołuje się files w tsconfig.json .

Przekonasz się, że jeśli użyjesz narzędzia takiego jak tsd lub typings do zarządzania definicjami typów dla bibliotek zewnętrznych, utworzą pojedynczy plik, który umieścisz w tsconfig.json; ten pojedynczy plik użyje odwołania potrójnego ukośnika, aby uwzględnić pozostałe pliki.

można znaleźć więcej informacji o potrójnych odniesień ukośnik w TypeScript Handbook

+0

Chodzi o to, że filesGlob automatycznie generuje klauzulę files. Ale wydaje się, że nie ma właściwej kolejności. Przyjrzę się sprawie, o której wspomniałeś. W każdym razie to, co mówisz o typowaniach, nie jest prawdą, rzeczywiste pliki .d.ts nie mają żadnych odniesień potrójnych cięć i nie muszę odwoływać się do tego pojedynczego pliku, w którym wymienione są odnośniki – iberbeu

+0

W sekcji plików, musisz tylko podać swój punkt wejścia. Komiks TypeScript automatycznie wygeneruje poprawną kolejność, zaczynając od punktu wejścia i po importowaniu; Wszystko, co definiuje globale i nie jest importowane gdzie indziej, to inny przypadek. – mjohnsonengr

+0

Należy pamiętać, że jest to poprawne tylko przy użyciu importów i modułów zewnętrznych.Jeśli używasz przestrzeni nazw/modułów wewnętrznych, kompilator nie zamówi ich poprawnie - musisz zamówić je samemu w * plikach * lub użyć odwołań potrójnych. – Alex

2

Przy zastosowaniu modułów wewnętrznych/nazw musimy ///<reference aby poinformować kompilator, co zależy od tego, w celu zbudowania wykresu zależności i sortować pliki we właściwej kolejności.

Opisane przez ciebie metody ES6 to (zewnętrzne) moduły, zobacz https://github.com/Microsoft/TypeScript/issues/2242. W związku z tym kolejność konkatenacji nie ma znaczenia, ponieważ są one ładowane asynchronicznie.

Używając modułów ES6, nie potrzebujesz ///<references.

Jeśli chodzi o fileGlobs, to nie jest zaimplementowane w TypeScript (jeszcze), ale nawet jeśli tak jest, myślę, że jest mało prawdopodobne, że zmieni cokolwiek na temat zależności zależności plików w projekcie. Nawet w atom-typescript, gdzie implementują fileGlobs, są one bardzo kodowane "opinionated against", które "zależą od dowolnej formy zamawiania js" i nie obsługują w żaden inny sposób niż ręczne zamawianie plików w tsconfig.json.

+0

Więc jeśli używasz wewnętrznego węzła takiego jak bufor, nadal potrzebujesz referencji potrójnych cięć? – DarkNeuron

+0

@ DarkNeuron Czy masz na myśli, że chcesz pobrać pakiet npm i użyć go w kodzie TypeScript? Następnie jest to moduł zewnętrzny i powinieneś go załadować za pomocą 'importu'. Wtedy nie będziesz potrzebować odniesień potrójnych cięć. – Alex

Powiązane problemy