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

Kodėl strict yra esmė

Iki šiol naudojomės strict: true, bet nesigilinom. Ši pamoka — apie tai, kodėl griežtumas ir yra visa TypeScript prasmė. Be jo TypeScript beveik nieko negaudo — tai tik „JavaScript su tipų sintakse". Su juo tipai pradeda reikalauti tikro tikslumo.

Trys flag'ai, kuriuos nagrinėsim:

noUncheckedIndexedAccess. Masyvo indeksas gali neegzistuoti:

const arr = [1, 2, 3];
const x = arr[10];    // vykdymo metu — undefined, bet tipas sako `number`?!

Su šiuo flag'u arr[10] tampa number | undefined. Negali apsimesti, kad indeksas visada yra. Prisimink 17 pamokos date.toISOString().split('T')[0] — kompiliatorius verčia apdoroti atvejį, kai [0] nėra.

exactOptionalPropertyTypes. Skiriasi „nėra lauko" ir „laukas yra, bet undefined":

interface T { x?: string }
const a: T = {};                 // ✅ x nėra
const b: T = { x: undefined };   // ❌ su exactOptional — „yra, bet undefined" ≠ „nėra"

Subtilu, bet svarbu: hdurl?: string reiškia „gali nebūti", ne „gali būti undefined reikšmė".

assertNever() — išsamumo (exhaustiveness) garantija. Tai gudriausia. assertNever(value: never) dedama switch default šakoje. Jei prie sąjungos pridedi naują variantą ir pamiršti jį apdoroti, value nebėra never, ir assertNever tampa kompiliavimo klaida — nurodydama tiksliai tą switch, kurį pamiršai atnaujinti.

Tai paverčia „pridėjau variantą ir kažkur pamiršau jį apdoroti" iš tylaus vykdymo meto bugo į kompiliatoriaus klaidą, rodančią pirštu į kodą. Būtent to reikia augančiai programai: pakeiti tipą vienoje vietoje, o kompiliatorius suranda visas vietas, kurias reikia atnaujinti.