Tema
/
Interneto svetainių kliento dalies kūrimas JS
📖 Teorija

Problema pirma, įrankis paskui

Baigėm Part 2 su pilna, veikiančia vanilla programa. Dabar — Part 3, ir jos ašis: pirma problema, tada įrankis.

Problema. Tavo veikiantis kodas tyliai pilnas paslėptų klaidų. Nukreipkim į jį TypeScript kompiliatorių ir pažiūrėkim, ką jis atmeta — tai tikros eilutės iš mūsų vanilla kodo:

const src = pic.hdurl;
// → TS2551: Property 'hdurl' does not exist on type 'Apod'.
//            Property 'hdurl' does not exist on type 'ApodVideo'.
const credit = ${pic.copyright.trim()}`;
// → TS18048: 'pic.copyright' is possibly 'undefined'.

Abi eilutės vanilla programoje veikė. Bet tik todėl, kad kažkas prisiminė parašyti apsaugas: pic.hdurl || pic.url (nes vaizdo įrašai neturi hdurl) ir if (pic.copyright) (nes viešos nuosavybės nuotraukos neturi autoriaus). Niekas to neužtikrino. Praleidi apsaugą — ir programa sulūžta tą dieną, kai APOD grąžina vaizdo įrašą arba nuotrauką be autoriaus. Tai — 6 pamokos media_type klaida ir 14 pamokos detail.js optional laukai, dabar sugautos automatiškai.

Tai ir yra pitchas: TypeScript nepaverčia tavęs geresniu programuotoju — jis paverčia „pamiršau apsaugą" iš vykdymo meto lūžio į kompiliavimo klaidą, kurios negali ignoruoti.

Tada — įrankis. TypeScript negali veikti naršyklėje: naršyklė nemoka .ts. Tipai turi būti iškirpti (kompiliuojami į .js) prieš paleidžiant — o tam reikia kompiliatoriaus (tsc) ir surinkiklio (Vite), o jiems — Node ir npm. Būtent todėl įrankiai atsiranda čia ir niekur anksčiau.

Ir tai — atsakymas 1 pamokai. Ten sakėm: „JavaScript nereikia surinkimo". Tai buvo tiesa — ir 14 pamokų tą įrodėm. Kas pasikeitė? Pridėjom tipus, o tipai — kalbos priedas, kurio naršyklė nesupranta. Įrankiai — ne ceremonija; tai tipų kaina, kurią sumoki tada, kai nusprendei, jog tipai to verti.