Viena funkcija per abu build'us
Kad arka „susijungtų", atsek vieną funkciją per abu build'us — pamatysi tiksliai, ką pridėjo tipai.
Imkim nuotraukos detalę (detail), kurią statei 14 pamokoje.
Vanilla versija veikė — bet su paslėptomis spąstomis:
img.src = pic.hdurl || pic.url; // veikia TIK todėl, kad prisiminei „|| pic.url"
if (pic.copyright) { // veikia TIK todėl, kad prisiminei šį if
credit.textContent = `© ${pic.copyright}`;
}
Abi eilutės teisingos — bet niekas neužtikrino, kad jas parašysi. Naujokas komandoje, kopijuodamas kodą, lengvai praleistų || pic.url arba if — ir programa lūžtų vaizdo dieną arba prie nuotraukos be autoriaus.
TypeScript versija tų klaidų neleidžia parašyti:
if (pic.media_type === 'image') {
img.src = pic.hdurl ?? pic.url; // hdurl pasiekiamas TIK po media_type patikros
}
if (pic.copyright !== undefined) { // kompiliatorius REIKALAUJA šios patikros
credit.textContent = `© ${pic.copyright}`;
}
Skirtumas ne stiliuje — kas užtikrina teisingumą. Vanilla: tavo atmintis ir drausmė. TypeScript: kompiliatorius, kuris atsisako kompiliuoti, kol neapdorosi visų atvejų. Pamiršti nebeįmanoma — ne todėl, kad tapai atidesnis, o todėl, kad kalba nebeleidžia.
Tas pats matosi visur:
| Vieta | Vanilla | TypeScript |
|---|---|---|
| media_type | „prisimink patikrą" | susiaurinimas privalomas |
| būsena | isLoading + error atskirai | LoadStatus sąjunga (negalima abu) |
| API atsakymas | pasitiki any |
tipo sargas prie ribos |
| rikiavimas | switch be default |
assertNever — visi variantai |
| įvertinimas | bet koks number |
Rating = 0..5 |
Kiekvienoje eilutėje TypeScript pavertė „reikia prisiminti" į „negali pamiršti". Tai ir yra visas kursas — ne „TypeScript yra geras", o „štai tiksliai kokias tavo paties klaidas jis pagauna, ir kodėl vanilla jų nepagavo".