Hrvatski

Ovladajte TypeScript konfiguracijom s ovim detaljnim vodičem za tsconfig.json. Naučite ključne opcije kompajlera, postavljanje projekta i napredne konfiguracije za efikasan razvoj.

TypeScript Konfiguracija: Sveobuhvatan Vodič za tsconfig.json

TypeScript, nadskup JavaScripta, unosi statičko tipiziranje u dinamični svijet web razvoja. Dobro konfigurirana tsconfig.json datoteka ključna je za iskorištavanje pune snage TypeScripta. Ovaj vodič pruža sveobuhvatan pregled datoteke tsconfig.json, pokrivajući bitne opcije kompajlera, postavljanje projekta i napredne konfiguracije.

Što je tsconfig.json?

Datoteka tsconfig.json je konfiguracijska datoteka koja specificira opcije kompajlera za TypeScript projekt. Ona govori TypeScript kompajleru kako transpilira TypeScript kod u JavaScript. Ova datoteka je ključna za definiranje strukture projekta, postavljanje pravila kompilacije i osiguravanje dosljednosti unutar razvojnog tima, bez obzira nalazi li se tim u jednom uredu ili je raspoređen na više kontinenata.

Stvaranje datoteke tsconfig.json

Da biste stvorili datoteku tsconfig.json, navigirajte do korijenskog direktorija vašeg projekta u terminalu i pokrenite sljedeću naredbu:

tsc --init

Ova naredba generira osnovnu datoteku tsconfig.json s često korištenim opcijama kompajlera. Zatim možete prilagoditi datoteku kako bi odgovarala specifičnim zahtjevima vašeg projekta. Tipična datoteka tsconfig.json uključivat će opcije kao što su compilerOptions, include i exclude.

Bitne opcije kompajlera

Odjeljak compilerOptions je srce datoteke tsconfig.json. Sadrži širok raspon opcija koje kontroliraju ponašanje TypeScript kompajlera. Evo nekih od najvažnijih opcija kompajlera:

target

Opcija target specificira ciljnu verziju ECMAScripta za generirani JavaScript kod. Uobičajene vrijednosti uključuju ES5, ES6 (ES2015), ES2016, ES2017, ES2018, ES2019, ES2020, ES2021, ES2022, ESNext. Odabir pravog cilja ključan je za osiguravanje kompatibilnosti s namjeravanim okruženjem za izvođenje, kao što su preglednici ili verzije Node.js-a.

Primjer:

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

module

Opcija module specificira stil generiranja koda modula. Uobičajene vrijednosti uključuju CommonJS, AMD, System, UMD, ES6 (ES2015), ES2020 i ESNext. Izbor sustava modula ovisi o ciljnom okruženju i korištenom povezivaču modula (npr. Webpack, Rollup, Parcel). Za Node.js često se koristi CommonJS, dok se za moderne web aplikacije preferira ES6 ili ESNext s povezivačem modula. Korištenje ESNexta omogućuje programerima da iskoriste najnovije značajke i optimizacije, oslanjajući se na povezivač da obradi konačni format modula.

Primjer:

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

lib

Opcija lib specificira popis bibliotečnih datoteka koje će biti uključene u kompilaciju. Ove bibliotečne datoteke pružaju definicije tipova za ugrađene JavaScript API-je i API-je preglednika. Uobičajene vrijednosti uključuju 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 i mnoge druge. Odabir odgovarajućih biblioteka osigurava da TypeScript kompajler ima potrebne informacije o tipovima za ciljno okruženje. Korištenje DOM biblioteke omogućuje projektu da kompajlira kod koji koristi API-je specifične za preglednik bez grešaka u tipovima.

Primjer:

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

allowJs

Opcija allowJs omogućuje TypeScript kompajleru da kompajlira JavaScript datoteke zajedno s TypeScript datotekama. Ovo je korisno za postupnu migraciju postojećih JavaScript projekata na TypeScript. Postavljanje ove opcije na true omogućuje kompajleru obradu .js datoteka, što omogućuje postupno usvajanje TypeScripta unutar projekta.

Primjer:

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

jsx

Opcija jsx specificira kako treba rukovati JSX sintaksom. Uobičajene vrijednosti uključuju preserve, react, react-native i react-jsx. Opcija preserve zadržava JSX sintaksu u izlaznom kodu, dok react pretvara JSX u pozive React.createElement. Opcija react-jsx koristi novu JSX transformaciju uvedenu u Reactu 17, koja ne zahtijeva importiranje Reacta. Odabir ispravne JSX opcije ključan je za projekte koji koriste React ili druge biblioteke temeljene na JSX-u.

Primjer:

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

declaration

Opcija declaration generira odgovarajuće .d.ts deklaracijske datoteke za svaku TypeScript datoteku. Deklaracijske datoteke sadrže informacije o tipovima i koriste ih drugi TypeScript projekti za korištenje kompajliranog koda. Generiranje deklaracijskih datoteka ključno je za stvaranje višekratno upotrebljivih biblioteka i modula. Ove datoteke omogućuju drugim TypeScript projektima da razumiju tipove i sučelja koje biblioteka izlaže, bez potrebe za kompilacijom izvornog koda.

Primjer:

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

sourceMap

Opcija sourceMap generira source map datoteke, koje mapiraju generirani JavaScript kod natrag na izvorni TypeScript kod. Source mape su ključne za debugiranje TypeScript koda u preglednicima i drugim okruženjima. Kada se dogodi greška u JavaScript kodu, source mapa omogućuje programeru da vidi odgovarajući TypeScript kod u debuggeru, što olakšava prepoznavanje i ispravljanje problema.

Primjer:

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

outDir

Opcija outDir specificira izlazni direktorij za generirane JavaScript datoteke. Ova opcija pomaže u organiziranju izlaznih datoteka projekta odvajanjem izvornog koda od kompajliranog koda. Korištenje outDir olakšava upravljanje procesom izgradnje i implementaciju aplikacije.

Primjer:

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

rootDir

Opcija rootDir specificira korijenski direktorij TypeScript projekta. Kompajler koristi ovaj direktorij kao osnovu za rješavanje naziva modula. Ova opcija je posebno važna za projekte sa složenom strukturom direktorija. Ispravno postavljanje rootDir osigurava da kompajler može pronaći sve potrebne module i ovisnosti.

Primjer:

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

strict

Opcija strict omogućuje sve stroge opcije provjere tipova. Ovo se visoko preporučuje za nove TypeScript projekte jer pomaže u ranom otkrivanju potencijalnih grešaka u procesu razvoja. Omogućavanje strogog načina rada nameće stroža pravila provjere tipova, što dovodi do robusnijeg i održivijeg koda. Najbolja je praksa omogućiti strogi način rada u svim novim TypeScript projektima.

Primjer:

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

esModuleInterop

Opcija esModuleInterop omogućuje interoperabilnost između CommonJS i ES modula. Ovo je važno za projekte koji koriste obje vrste modula. Kada je esModuleInterop omogućen, TypeScript će automatski rješavati razlike između CommonJS i ES modula, olakšavajući import i export modula između ta dva sustava. Ova opcija je posebno korisna pri radu s bibliotekama trećih strana koje mogu koristiti različite sustave modula.

Primjer:

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

moduleResolution

Opcija moduleResolution specificira kako TypeScript rješava importe modula. Uobičajene vrijednosti uključuju Node i Classic. Strategija rješavanja modula Node je zadana i temelji se na algoritmu za rješavanje modula Node.js-a. Strategija rješavanja modula Classic je starija i rjeđe se koristi. Korištenje strategije rješavanja modula Node osigurava da TypeScript može ispravno riješiti importe modula u Node.js okruženju.

Primjer:

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

baseUrl i paths

Opcije baseUrl i paths koriste se za konfiguriranje rješavanja modula za ne-relativne importe modula. Opcija baseUrl specificira osnovni direktorij za rješavanje ne-relativnih naziva modula. Opcija paths omogućuje mapiranje naziva modula na specifične lokacije na datotečnom sustavu. Ove opcije su posebno korisne za projekte sa složenom strukturom direktorija i za pojednostavljivanje importa modula. Korištenje baseUrl i paths može učiniti kod čitljivijim i lakšim za održavanje.

Primjer:

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

Opcije Include i Exclude

Opcije include i exclude specificiraju koje datoteke treba uključiti u kompilaciju, a koje izostaviti. Ove opcije koriste glob uzorke za podudaranje naziva datoteka. Korištenje opcija include i exclude omogućuje kontrolu nad time koje datoteke obrađuje TypeScript kompajler, poboljšavajući performanse izgradnje i smanjujući greške. Najbolja je praksa eksplicitno specificirati datoteke koje će biti uključene u kompilaciju.

Primjer:

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

Opcija Extends

Opcija extends omogućuje nasljeđivanje opcija kompajlera iz druge tsconfig.json datoteke. Ovo je korisno za dijeljenje zajedničkih postavki konfiguracije između više projekata ili za stvaranje osnovnih konfiguracija. Korištenje opcije extends promiče ponovnu upotrebu koda i smanjuje dupliciranje. Najbolja je praksa stvarati osnovne konfiguracije i proširivati ih u pojedinačnim projektima.

Primjer:

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

Napredne Konfiguracije

Osim bitnih opcija kompajlera, tsconfig.json podržava napredne konfiguracije za specijalizirane scenarije.

Inkrementalna Kompilacija

Za velike projekte, inkrementalna kompilacija može značajno poboljšati vrijeme izgradnje. TypeScript može keširati rezultate prethodnih kompilacija i ponovno kompajlirati samo datoteke koje su se promijenile. Omogućavanje inkrementalne kompilacije može drastično smanjiti vrijeme izgradnje za velike projekte. To je posebno važno za projekte s velikim brojem datoteka i ovisnosti.

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

Reference na Projekte

Reference na projekte omogućuju vam da strukturirate velike TypeScript projekte u manje, neovisne module. To može poboljšati vrijeme izgradnje i organizaciju koda. Korištenje referenci na projekte može učiniti velike projekte lakšim za upravljanje i održavanje. Najbolja je praksa koristiti reference na projekte za velike, složene projekte.

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

Prilagođene Definicije Tipova

Ponekad ćete možda trebati pružiti definicije tipova za JavaScript biblioteke koje ih nemaju. Možete stvoriti prilagođene .d.ts datoteke kako biste definirali tipove za te biblioteke. Stvaranje prilagođenih definicija tipova omogućuje vam korištenje JavaScript biblioteka u vašem TypeScript kodu bez žrtvovanja sigurnosti tipova. To je posebno korisno pri radu sa starijim JavaScript kodom ili bibliotekama koje ne pružaju vlastite definicije tipova.

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

Najbolje Prakse

Rješavanje Uobičajenih Problema

Konfiguriranje tsconfig.json ponekad može biti izazovno. Evo nekih uobičajenih problema i njihovih rješenja:

Problemi s Rješavanjem Modula

Ako naiđete na greške u rješavanju modula, provjerite je li opcija moduleResolution ispravno konfigurirana i jesu li opcije baseUrl i paths pravilno postavljene. Dvaput provjerite putanje navedene u opciji paths kako biste bili sigurni da su ispravne. Provjerite jesu li svi potrebni moduli instalirani u direktoriju node_modules.

Greške u Tipovima

Greške u tipovima mogu se pojaviti ako su definicije tipova netočne ili nedostaju. Provjerite imate li instalirane ispravne definicije tipova za sve biblioteke koje koristite. Ako koristite JavaScript biblioteku koja nema definicije tipova, razmislite o stvaranju prilagođenih definicija tipova.

Greške pri Kompilaciji

Greške pri kompilaciji mogu se pojaviti ako u vašem TypeScript kodu postoje sintaktičke greške ili greške u tipovima. Pažljivo pregledajte poruke o greškama i ispravite sve sintaktičke greške ili greške u tipovima. Provjerite slijedi li vaš kod konvencije kodiranja TypeScripta.

Zaključak

Dobro konfigurirana tsconfig.json datoteka ključna je za uspješan TypeScript projekt. Razumijevanjem bitnih opcija kompajlera i naprednih konfiguracija, možete optimizirati svoj razvojni tijek rada, poboljšati kvalitetu koda i osigurati kompatibilnost s ciljnim okruženjem. Ulaganje vremena u pravilno konfiguriranje tsconfig.json isplatit će se dugoročno smanjenjem grešaka, poboljšanjem održivosti i pojednostavljivanjem procesa izgradnje. To rezultira efikasnijim i pouzdanijim razvojem softvera. Informacije pružene ovdje dizajnirane su da budu univerzalno primjenjive i trebale bi pružiti čvrst temelj za početak novog projekta s TypeScriptom.

Ne zaboravite konzultirati službenu TypeScript dokumentaciju za najnovije informacije i detaljna objašnjenja svih dostupnih opcija kompajlera. TypeScript dokumentacija je vrijedan resurs za razumijevanje složenosti TypeScript konfiguracije.

TypeScript Konfiguracija: Sveobuhvatan Vodič za tsconfig.json | MLOG