typescript - Vad används *.d.ts-filer till?


I många TypeScript-exempel skapas filer av typen *.d.ts automatiskt vid byggtid. Vissa av exemplen talar om ambienta deklarationer. Detta hjälper mig dock inte att förstå idén och meningen bakom dessa filer, eftersom de i princip bara upprepar vad andra klasser redan har.

Så varför bry sig om att skapa extra *.d.ts-filer? Hur hjälper de mig i min kod?

Svar #1

Definitionsfilerna som genereras av TypeScript-kompilatorn är faktiskt mestadels en upprepning av koden du skrev, men med några märkbara skillnader:

  • De innehåller inte implementation, bara deklarationer
  • De innehåller endast offentligt tillgängliga typer

Användningsfallet för dessa deklarationsfiler är för att distribuera bibliotek. Du kan distribuera ett bibliotek utan den ursprungliga TypeScript-koden (eftersom det ändå inte spelar någon roll vid körning) och distribuera endast den kompilerade JavaScript-koden. JavaScript-användare kommer att använda JavaScript och bry sig inte om dess ursprung. TypeScript-användare kommer också att använda JavaScript vid körning, men .d.ts-filerna låter kompilatorn kontrollera koden även om den ursprungliga TypeScript-koden för biblioteket inte är närvarande.

Denna samma metod kan också användas för att dela upp ett stort projekt i flera mindre projekt som använder deklarationsfiler för att etablera gränssnittet mellan dem. Varje projekt kan kompileras om oberoende utan att alla kompileras om, vilket minskar kompileringstiderna. TypeScript-kompilatorn planerar faktiskt att lägga till inbyggt stöd för detta i framtiden.

Svar #2

Om du har en JavaScript-fil och vill lägga till rik typinformation till den, kan du göra det i en deklarationsfil. Det är som att dela upp din TypeScript mellan två filer; en JavaScript-fil .js med bara vanlig JavaScript, och en deklarationsfil .d.ts med all typinformation.

Detta betyder att det finns viss redundans mellan filerna.

Vanligtvis, om du skriver ett TypeScript-bibliotek genererar du automatiskt JavaScript- och deklarationsfilen och paketerar dessa istället för den ursprungliga TypeScript-koden. Det innebär att biblioteket kan användas från både JavaScript- och TypeScript-applikationer och tillåter det konsumerande biblioteket att använda en annan TypeScript-version än ditt bibliotek.

Om du har JavaScript-filer som du vill inkludera i kompileringen behöver du inte skapa en deklarationsfil - IDE:er tillåter TypeScript-stil inferens inom JavaScript (till exempel tillåter VS Code kommentaren // @ts-check) och kompilatorn tillåter att JavaScript inkluderas i kompileringen om du så önskar.

Relaterade artiklar