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

Namų darbas — patikima riba

Namų darbas — patikima riba.

  1. Tipo sargas. src/lib/api.ts parašyk isApod(value: unknown): value is Apod ir request(): Promise<unknown>. fetchPictures grąžink data.filter(isApod).
  2. Įrodyk skylę. Laikinai pakeisk request grąžinimą į Promise<any> ir priskirk tiesiogiai const pics: Apod[] = data. Kompiliatorius tyli. Grąžink unknown — dabar reikalauja sargo. Tai ir yra skirtumas tarp „tikiuosi" ir „patikrinau".
  3. Sulaužyk API. Imituok pakeistą atsakymą (pvz. objektą be url). Su sargu jis tiesiog išfiltruojamas; be sargo — galerija bandytų rodyti undefined ir lūžtų.
  4. Readonly. state.ts getState() grąžink Readonly<AppState>. Pabandyk getState().pictures = [] — klaida. Pakeisk per veiksmą — veikia.
  5. catch unknown. errors.ts toMessage(error: unknown). Pabandyk error.message be instanceof — klaida ('error' is of type 'unknown'). Pridėk instanceof — ok.

Privalomi testai:

  • Ribos testas: be sargo unknown nekompiliuojasi kaip Apod[]; su sargu — patikima.
  • Readonly testas: priskyrimas getState() laukui nekompiliuojasi.

Atsiskaitymui: ekrano nuotraukos: (1) any vs unknown skirtumas (skylė), (2) Readonly priskyrimo klaida, (3) catch unknown reikalaujantis instanceof.

Toliau. Turim tvirtas ribas ir tipizuotą būseną. Bet iki šiol įjungėm tik pagrindinį griežtumą. 18 pamokoje pažiūrėsim, ką duoda griežtieji flag'ai: noUncheckedIndexedAccess (masyvo indeksas gali būti undefined), exactOptionalPropertyTypes ir assertNever — išsamumo garantija, verčianti apdoroti kiekvieną sąjungos variantą.