TypeScript och tsconfig.json
Denna artikel förklarar TypeScript och tsconfig.json.
Vi börjar med TypeScripts grundläggande roll och förklarar, med specifika exempel, hur tsconfig.json fungerar i ett projekt.
YouTube Video
TypeScript och tsconfig.json
TypeScript är 'JavaScript med typer.'. För att använda TypeScript effektivt i verkliga projekt är det dock nödvändigt att förstå tsconfig.json korrekt och konfigurera den medvetet.
Varför behöver vi TypeScript?
Den främsta anledningen till att använda TypeScript är 'möjligheten att fånga fel innan körning.'.
1function add(a: number, b: number): number {
2 return a + b;
3}
4
5add(1, "2");Den här koden skulle inte orsaka ett fel i JavaScript förrän efter att programmet körs, men i TypeScript ger det ett typsfel vid kompilering.
Denna 'upptäckt i ett tidigt skede' förbättrar avsevärt utvecklingseffektivitet och kvalitet.
Hur körs TypeScript?
I princip kan TypeScript inte köras som det är. Du måste konvertera det till JavaScript med tsc (TypeScript Compiler)..
1npm install -D typescript
2npx tsc --init- Genom att utföra denna operation genereras
tsconfig.json, vilket är den centrala filen som definierar TypeScript-projektets beteende.
Vilken roll har tsconfig.json?
tsconfig.json är en konfigurationsfil som bestämmer 'vilka filer', 'med vilka regler' och 'hur de ska konverteras.'. Även om det kan verka komplicerat till en början är det bara några få inställningar som verkligen är viktiga.
1{
2 "compilerOptions": {
3 "target": "ES2020",
4 "module": "ESNext",
5 "strict": true
6 }
7}- Med bara dessa inställningar är modern och säker TypeScript-utveckling möjlig.
target: Versionen av JavaScript som ska genereras
target bestämmer vilken nivå av JavaScript-specifikation som ska genereras.
1"target": "ES2020"På så sätt kommer TypeScript att generera JavaScript motsvarande ES2020. För äldre miljöer, välj ES5; för endast de senaste miljöerna, välj ES2022 osv.
Vid val av ESNext
1"target": "ESNext"-
ESNextanger att den senaste tillgängliga JavaScript-syntaxen ska genereras som den är. TypeScript transpirerar inte syntaxen utan lämnar det till runtime-miljön, som Node.js eller webbläsare, att hantera den. -
ESNextär därför lämpligt när du endast riktar dig mot den senaste Node.js eller när du använder Babel eller en bundler för att transpilerera separat. Om runtime-miljön däremot inte stöder den senaste syntaxen, kan detta leda till fel under körning, så var försiktig.
module: Ange modultypen
module anger modulformatet.
1"module": "ESNext"ESNextär standard på frontend och i moderna Node.js-miljöer.- Välj
"CommonJS"endast om du behöver CommonJS.
strict: Maximera typesäkerhet
strict är ett reglage för att maximera TypeScripts säkerhet.
1"strict": true- Att aktivera detta fångar grundligt otydliga typer och potentiella buggar.
strict-läge och implicit any
När du aktiverar strict behandlar TypeScript variabler där typen inte kan utläsas som ett fel.
1function printValue(value) {
2 console.log(value);
3}- Denna variabel,
value, har ingen typinformation vid deklarationen, så TypeScript kan inte bestämma dess typ. Följaktligen användsanyimplicit, vilket ger en varning (eller ett fel) istrict-läge.
1function printValue(value: number) {
2 console.log(value);
3}- Genom att explicit ange typen så här kan TypeScript förstå att 'den här variabeln hanterar endast nummer.'. I TypeScript är det viktigare att typen kan entydigt fastställas än att typen kan utelämnas.
include/exclude: Kontrollera vilka filer som ska kompileras
I tsconfig.json kan du ange vilka filer som ska inkluderas och vilka filer som ska uteslutas från kompilering.
1{
2 "include": ["src"],
3 "exclude": ["node_modules"]
4}- Med detta kommer endast filer under
srcatt hanteras av TypeScript. node_modulessom anges iexcludekommer att uteslutas från kompilering även om den finns under en sökväg som inkluderas avinclude.
outDir: Ange utmatningsmapp
Ange outDir för att hantera sökvägen för byggresultat.
1"outDir": "dist"- Med detta kommer alla kompilerade filer att genereras i mappen
dist. I praktiken är det standard att separera källkod från byggartefakter.
rootDir: Ange källkodsmappen
rootDir anger mappen som TypeScript betraktar som källkodens rot.
1"rootDir": "src"-
Den här inställningen gör att TypeScript bevarar mappstrukturen baserat på
srcvid generering av filer. Till exempel kommersrc/index.tsatt genereras somdist/index.js. -
Strukturen för mappen som anges i
rootDirkommer att återskapas ioutDir.
esModuleInterop: Brygga mellan CommonJS och ES-moduler
Låt oss nu titta på esModuleInterop.
1"esModuleInterop": true- Om det aktiveras kan du säkert använda CommonJS-moduler med
import-syntaxen.
1import fs from "fs";- Denna inställning är nästan nödvändig när du använder Node.js.
noImplicitAny: Förbjud implicit 'any' typer
Det är också viktigt att förstärka typkontroller i tsconfig.json.
1"noImplicitAny": true- Med detta kan du förbjuda implicit
any-typer. Detta gör att du pålitligt kan upptäcka ställen där du glömt att ange en typ.
Konfiguration för att identifiera oanvänd kod
Inställningar för att identifiera oanvänd kod är också användbara för att förbättra underhållbarheten.
1"noUnusedLocals": true,
2"noUnusedParameters": true- Med detta flaggas onödiga variabler och argument omedelbart med varningar.
lib: Definiera de inbyggda API:er som är tillgängliga
lib är en inställning som anger de standard-API:er som TypeScript antar finns.
1"lib": ["ES2020", "DOM"]- Med denna inställning blir följande typer tillgängliga:.
Med
ES2020blir moderna funktioner somPromise,MapochSettillgängliga. MedDOMblir webbläsar-API:er somdocument,windowochHTMLElementtillgängliga.
På frontend, inkludera DOM; för projekt endast för Node.js, ta bort DOM för att förhindra att onödiga globala typer inkluderas.
moduleResolution: Regler för moduluppslagning
moduleResolution bestämmer hur moduler som anges i import-satser löses upp.
1"moduleResolution": "Node"De två huvudsakliga alternativen är följande:.
- Om du anger
Nodeanvänds Node.js regler för moduluppslagning. Classicär den gamla, TypeScript-specifika metoden, men den används sällan idag.
I miljöer som använder Node.js eller en bundler är det säkert att explicit ange Node.
En minimal, produktionsklar tsconfig.json
Baserat på vad vi har gått igenom hittills, skulle en minimal, produktionsklar tsconfig.json se ut så här:.
1{
2 "compilerOptions": {
3 "target": "ES2020",
4 "module": "ESNext",
5 "moduleResolution": "Node",
6 "lib": ["ES2020", "DOM"],
7 "strict": true,
8 "rootDir": "src",
9 "outDir": "dist",
10 "esModuleInterop": true,
11 "noImplicitAny": true,
12 "noUnusedLocals": true,
13 "noUnusedParameters": true
14 },
15 "include": ["src"]
16}Denna konfiguration ger en trygg grund för både frontend- och Node.js-projekt.
Sammanfattning: tsconfig.json är en 'regelbok'
tsconfig.json är inte bara en konfigurationsfil, utan en 'regelbok' som gäller för hela projektet. Med tsconfig.json definieras viktiga riktlinjer tydligt, som följande:.
- Nivån på typsäkerhet.
- Kodningskonventioner för ditt team.
- Förebyggande av framtida fel.
Genom att förstå tsconfig.json kommer du att kunna inte bara skriva TypeScript utan också utforma dina projekt för säker TypeScript-användning.
Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.