I TypeScript, när ska man använda reference och när ska man använda import?
I TypeScript finns det två begrepp för att referera till filer/moduler. Även om jag gick igenom TypeScript-dokumentationen kort är det oklart för mig när vilken metod bör användas:
- Triple-Slash-referens:
/// <reference path="..." /> - Import:
import { Foo } from "./Foo";
Tack
Svar #1
Det är viktigt att förstå att detta inte är två begrepp för att referera till filer/moduler. De är faktiskt två helt olika saker.
importera
Detta nyckelord introducerades i ES2015 och är således en del av dess implementation, som är JavaScript. Det refererar inte bara till en fil/modul, utan det läser den refererade modulen och gör dess API/exponerade innehåll tillgängligt för dig.
Innan import var vi tvungna att använda någon sorts concat-mekanism eller använda <link> i HTML för att få åtkomst till till exempel jQuery. Nu kan vi göra import * as $ from 'jQuery' och JavaScript/TypeScript kommer att ”automatiskt” ladda modulen åt oss. Åtminstone är det vad det kommer att göra i framtiden så snart Loader är färdig.
Om du använder TypeScript kommer TypeScript-kompilatorn också att veta vilka typer/signaturer/... den exporterade koden har.
/// <referens>
Den lite konstiga <reference>-kommentaren användes för att hämta typdefinitioner från externa .d.ts-filer. Men med en nyare version av TypeScript bör du inte behöva göra detta längre. Du kan läsa om framtiden för deklarationsfiler här.
Så skillnaden mellan import och <reference> är att import kommer att ladda den ”verkliga” koden och göra den tillgänglig för dig. <reference> å andra sidan kommer bara att importera typdefinitioner för dig. I din redigerare/IDE kommer det att se ut som om du använder koden, men faktiskt vet TypeScript om de exponerade API:erna och låtsas att du faktiskt kan använda den laddade modulen. Det blir ditt jobb att göra modulen (globalt) tillgänglig när du vill köra din kod.