Dansk

Mestr TypeScript-konfiguration med denne dybdegående guide til tsconfig.json. Lær essentielle compiler-indstillinger, projektopætning og avancerede konfigurationer for effektiv udvikling.

TypeScript-konfiguration: En omfattende guide til tsconfig.json

TypeScript, et supersæt af JavaScript, bringer statisk typning til den dynamiske verden af webudvikling. En velkonfigureret tsconfig.json-fil er afgørende for at udnytte den fulde kraft af TypeScript. Denne guide giver en omfattende oversigt over tsconfig.json, der dækker essentielle compiler-indstillinger, projektopætning og avancerede konfigurationer.

Hvad er tsconfig.json?

tsconfig.json-filen er en konfigurationsfil, der specificerer compiler-indstillingerne for et TypeScript-projekt. Den fortæller TypeScript-compileren, hvordan den skal transpilerere TypeScript-kode til JavaScript. Denne fil er essentiel for at definere projektets struktur, fastsætte kompileringsregler og sikre konsistens på tværs af udviklingsteamet, uanset om teamet er placeret på et enkelt kontor eller fordelt over flere kontinenter.

Oprettelse af en tsconfig.json-fil

For at oprette en tsconfig.json-fil skal du navigere til dit projekts rodmappe i terminalen og køre følgende kommando:

tsc --init

Denne kommando genererer en grundlæggende tsconfig.json-fil med almindeligt anvendte compiler-indstillinger. Du kan derefter tilpasse filen, så den passer til dit projekts specifikke krav. En typisk tsconfig.json vil indeholde indstillinger som compilerOptions, include og exclude.

Essentielle Compiler-indstillinger

compilerOptions-sektionen er hjertet i tsconfig.json-filen. Den indeholder en bred vifte af indstillinger, der styrer TypeScript-compilerens adfærd. Her er nogle af de vigtigste compiler-indstillinger:

target

target-indstillingen specificerer ECMAScript-målversionen for den genererede JavaScript-kode. Almindelige værdier inkluderer ES5, ES6 (ES2015), ES2016, ES2017, ES2018, ES2019, ES2020, ES2021, ES2022, ESNext. At vælge det rigtige mål er afgørende for at sikre kompatibilitet med det tilsigtede kørselsmiljø, såsom browsere eller Node.js-versioner.

Eksempel:

{
  "compilerOptions": {
    "target": "ES2020"
  }
}

module

module-indstillingen specificerer stilen for generering af modul-kode. Almindelige værdier inkluderer CommonJS, AMD, System, UMD, ES6 (ES2015), ES2020 og ESNext. Valget af modulsystem afhænger af målmiljøet og den anvendte module bundler (f.eks. Webpack, Rollup, Parcel). For Node.js bruges CommonJS ofte, mens for moderne webapplikationer foretrækkes ES6 eller ESNext med en module bundler. Brug af ESNext giver udviklere mulighed for at udnytte de nyeste funktioner og optimeringer, mens de stoler på, at bundleren håndterer det endelige modulformat.

Eksempel:

{
  "compilerOptions": {
    "module": "ESNext"
  }
}

lib

lib-indstillingen specificerer en liste over biblioteksfiler, der skal inkluderes i kompileringen. Disse biblioteksfiler leverer typedefinitioner for indbyggede JavaScript-API'er og browser-API'er. Almindelige værdier inkluderer ES5, ES6, ES2015, ES2016, ES2017, ES2018, ES2019, ES2020, ES2021, ES2022, ESNext, DOM, WebWorker, ScriptHost, ES2015.Core, ES2015.Collection, ES2015.Iterable, ES2015.Promise, ES2015.Proxy, ES2015.Reflect, ES2015.Generator, ES2015.Symbol, ES2015.Symbol.WellKnown, ES2016.Array.Include, ES2017.object, ES2017.Intl, ES2017.SharedMemory, ES2017.String, ES2017.TypedArrays, ES2018.Intl, ES2018.Promise, ES2018.RegExp, ES2019.Array, ES2019.Object, ES2019.String, ES2019.Symbol, ES2020.BigInt, ES2020.Promise, ES2020.String, ES2020.Symbol.WellKnown, ES2021.Promise, ES2021.String, ES2021.WeakRef, ES2022.Error, ES2022.Object, ES2022.String, og mange flere. At vælge de passende biblioteker sikrer, at TypeScript-compileren har den nødvendige typeinformation for målmiljøet. Brug af DOM-biblioteket gør det muligt for projektet at kompilere kode, der bruger browserspecifikke API'er uden typefejl.

Eksempel:

{
  "compilerOptions": {
    "lib": ["ES2020", "DOM"]
  }
}

allowJs

allowJs-indstillingen giver TypeScript-compileren mulighed for at kompilere JavaScript-filer sammen med TypeScript-filer. Dette er nyttigt for gradvist at migrere eksisterende JavaScript-projekter til TypeScript. At sætte denne til true gør det muligt for compileren at behandle .js-filer, hvilket muliggør en gradvis indførelse af TypeScript i et projekt.

Eksempel:

{
  "compilerOptions": {
    "allowJs": true
  }
}

jsx

jsx-indstillingen specificerer, hvordan JSX-syntaks skal håndteres. Almindelige værdier inkluderer preserve, react, react-native og react-jsx. preserve bevarer JSX-syntaksen i outputtet, mens react transformerer JSX til React.createElement-kald. react-jsx bruger den nye JSX-transformation, der blev introduceret i React 17, som ikke kræver import af React. Valg af den korrekte JSX-indstilling er afgørende for projekter, der bruger React eller andre JSX-baserede biblioteker.

Eksempel:

{
  "compilerOptions": {
    "jsx": "react-jsx"
  }
}

declaration

declaration-indstillingen genererer tilsvarende .d.ts-deklarationsfiler for hver TypeScript-fil. Deklarationsfiler indeholder typeinformation og bruges af andre TypeScript-projekter til at forbruge den kompilerede kode. Generering af deklarationsfiler er essentielt for at skabe genanvendelige biblioteker og moduler. Disse filer giver andre TypeScript-projekter mulighed for at forstå de typer og interfaces, som biblioteket eksponerer, uden at skulle kompilere den oprindelige kildekode.

Eksempel:

{
  "compilerOptions": {
    "declaration": true
  }
}

sourceMap

sourceMap-indstillingen genererer source map-filer, som mapper den genererede JavaScript-kode tilbage til den oprindelige TypeScript-kode. Source maps er essentielle for debugging af TypeScript-kode i browsere og andre miljøer. Når der opstår en fejl i JavaScript-koden, giver source map'en udvikleren mulighed for at se den tilsvarende TypeScript-kode i debuggeren, hvilket gør det lettere at identificere og rette fejlen.

Eksempel:

{
  "compilerOptions": {
    "sourceMap": true
  }
}

outDir

outDir-indstillingen specificerer output-mappen for de genererede JavaScript-filer. Denne indstilling hjælper med at organisere projektets build-output ved at adskille kildekoden fra den kompilerede kode. Brug af en outDir gør det lettere at administrere build-processen og implementere applikationen.

Eksempel:

{
  "compilerOptions": {
    "outDir": "dist"
  }
}

rootDir

rootDir-indstillingen specificerer rodmappen for TypeScript-projektet. Compileren bruger denne mappe som base for at opløse modulnavne. Denne indstilling er især vigtig for projekter med en kompleks mappestruktur. Korrekt indstilling af rootDir sikrer, at compileren kan finde alle nødvendige moduler og afhængigheder.

Eksempel:

{
  "compilerOptions": {
    "rootDir": "src"
  }
}

strict

strict-indstillingen aktiverer alle strenge typekontrol-indstillinger. Dette anbefales stærkt til nye TypeScript-projekter, da det hjælper med at fange potentielle fejl tidligt i udviklingsprocessen. Aktivering af strict mode håndhæver strengere regler for typekontrol, hvilket fører til mere robust og vedligeholdelsesvenlig kode. Det er en bedste praksis at aktivere strict mode i alle nye TypeScript-projekter.

Eksempel:

{
  "compilerOptions": {
    "strict": true
  }
}

esModuleInterop

esModuleInterop-indstillingen muliggør interoperabilitet mellem CommonJS og ES-moduler. Dette er vigtigt for projekter, der bruger begge typer moduler. Når esModuleInterop er aktiveret, håndterer TypeScript automatisk forskellene mellem CommonJS og ES-moduler, hvilket gør det lettere at importere og eksportere moduler mellem de to systemer. Denne indstilling er især nyttig, når man arbejder med tredjepartsbiblioteker, der kan bruge forskellige modulsystemer.

Eksempel:

{
  "compilerOptions": {
    "esModuleInterop": true
  }
}

moduleResolution

moduleResolution-indstillingen specificerer, hvordan TypeScript opløser modulimport. Almindelige værdier inkluderer Node og Classic. Node-modulopløsningsstrategien er standard og er baseret på Node.js-modulopløsningsalgoritmen. Classic-modulopløsningsstrategien er ældre og mindre brugt. Brug af Node-modulopløsningsstrategien sikrer, at TypeScript korrekt kan opløse modulimport i et Node.js-miljø.

Eksempel:

{
  "compilerOptions": {
    "moduleResolution": "Node"
  }
}

baseUrl og paths

baseUrl- og paths-indstillingerne bruges til at konfigurere modulopløsning for ikke-relative modulimporter. baseUrl-indstillingen specificerer basismappen for opløsning af ikke-relative modulnavne. paths-indstillingen giver dig mulighed for at mappe modulnavne til specifikke placeringer på filsystemet. Disse indstillinger er især nyttige for projekter med en kompleks mappestruktur og for at forenkle modulimport. Brug af baseUrl og paths kan gøre koden mere læsbar og vedligeholdelsesvenlig.

Eksempel:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@components/*": ["src/components/*"],
      "@utils/*": ["src/utils/*"]
    }
  }
}

Include- og Exclude-indstillinger

include- og exclude-indstillingerne specificerer, hvilke filer der skal inkluderes i kompileringen, og hvilke filer der skal udelukkes. Disse indstillinger bruger glob-mønstre til at matche filnavne. Brug af include og exclude giver dig mulighed for at kontrollere, hvilke filer der behandles af TypeScript-compileren, hvilket forbedrer build-ydeevnen og reducerer fejl. Det er en bedste praksis eksplicit at specificere, hvilke filer der skal inkluderes i kompileringen.

Eksempel:

{
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

Extends-indstilling

extends-indstillingen giver dig mulighed for at arve compiler-indstillinger fra en anden tsconfig.json-fil. Dette er nyttigt for at dele fælles konfigurationsindstillinger mellem flere projekter eller for at oprette grundlæggende konfigurationer. Brug af extends-indstillingen fremmer genbrug af kode og reducerer duplikering. Det er en bedste praksis at oprette grundlæggende konfigurationer og udvide dem i individuelle projekter.

Eksempel:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "jsx": "react-jsx"
  },
  "include": ["src/**/*"]
}

Avancerede konfigurationer

Ud over de essentielle compiler-indstillinger understøtter tsconfig.json avancerede konfigurationer for specialiserede scenarier.

Inkrementel kompilering

For store projekter kan inkrementel kompilering markant forbedre build-tider. TypeScript kan cache resultaterne af tidligere kompileringer og kun genkompilere filer, der er blevet ændret. Aktivering af inkrementel kompilering kan dramatisk reducere build-tider for store projekter. Dette er især vigtigt for projekter med et stort antal filer og afhængigheder.

{
  "compilerOptions": {
    "incremental": true,
    "tsBuildInfoFile": ".tsbuildinfo"
  }
}

Project References

Project references giver dig mulighed for at strukturere store TypeScript-projekter i mindre, uafhængige moduler. Dette kan forbedre build-tider og kodeorganisering. Brug af project references kan gøre store projekter mere håndterbare og lettere at vedligeholde. Det er en bedste praksis at bruge project references til store, komplekse projekter.

{
  "compilerOptions": {
    "composite": true
  },
  "references": [
    { "path": "./module1" },
    { "path": "./module2" }
  ]
}

Brugerdefinerede typedefinitioner

Nogle gange kan du have brug for at levere typedefinitioner til JavaScript-biblioteker, der ikke har dem. Du kan oprette brugerdefinerede .d.ts-filer for at definere typerne for disse biblioteker. Oprettelse af brugerdefinerede typedefinitioner giver dig mulighed for at bruge JavaScript-biblioteker i din TypeScript-kode uden at ofre typesikkerhed. Dette er især nyttigt, når man arbejder med ældre JavaScript-kode eller biblioteker, der ikke leverer deres egne typedefinitioner.

// custom.d.ts
declare module 'my-library' {
  export function doSomething(x: number): string;
}

Bedste praksis

Fejlfinding af almindelige problemer

Konfiguration af tsconfig.json kan nogle gange være udfordrende. Her er nogle almindelige problemer og deres løsninger:

Problemer med modulopløsning

Hvis du støder på fejl med modulopløsning, skal du sikre, at moduleResolution-indstillingen er korrekt konfigureret, og at baseUrl- og paths-indstillingerne er sat korrekt op. Dobbelttjek stierne specificeret i paths-indstillingen for at sikre, at de er korrekte. Verificer, at alle nødvendige moduler er installeret i node_modules-mappen.

Typefejl

Typefejl kan opstå, hvis typedefinitionerne er forkerte eller mangler. Sørg for, at du har de korrekte typedefinitioner installeret for alle de biblioteker, du bruger. Hvis du bruger et JavaScript-bibliotek, der ikke har typedefinitioner, kan du overveje at oprette brugerdefinerede typedefinitioner.

Kompileringsfejl

Kompileringsfejl kan opstå, hvis der er syntaksfejl eller typefejl i din TypeScript-kode. Gennemgå fejlmeddelelserne omhyggeligt og ret eventuelle syntaksfejl eller typefejl. Sørg for, at din kode følger TypeScript-kodningskonventionerne.

Konklusion

En velkonfigureret tsconfig.json-fil er essentiel for et vellykket TypeScript-projekt. Ved at forstå de essentielle compiler-indstillinger og avancerede konfigurationer kan du optimere din udviklingsworkflow, forbedre kodekvaliteten og sikre kompatibilitet med målmiljøet. At investere tid i korrekt konfiguration af tsconfig.json vil betale sig i det lange løb ved at reducere fejl, forbedre vedligeholdelsesvenligheden og strømline byggeprocessen. Dette resulterer i mere effektiv og pålidelig softwareudvikling. Informationen her er designet til at være universelt anvendelig og bør give et solidt fundament for at starte et nyt projekt med TypeScript.

Husk at konsultere den officielle TypeScript-dokumentation for den mest opdaterede information og detaljerede forklaringer af alle tilgængelige compiler-indstillinger. TypeScript-dokumentationen er en værdifuld ressource til at forstå finesserne i TypeScript-konfiguration.