Treci la conținutul principal

Interfețe mici

Principiul Segregării Interfețelor spune: niciun tip nu ar trebui să fie obligat să implementeze metode de care nu are nevoie. În loc de o interfață supraîncărcată cu multe metode, fă mai multe interfețe mici — fiecare tip implementează doar ceea ce este adevărat pentru el.

TypeScript face interfețele mici ieftine: tipurile se potrivesc cu o interfață după formă, așa că o clasă satisface o interfață cu o singură metodă doar prin faptul că are acea metodă. Poți defini o interfață minusculă exact pentru ce îi trebuie funcției tale, iar orice valoare care i se potrivește se califică deja.


Interfața supraîncărcată

O interfață Worker cu work() și eat() pare inofensivă — până când un robot își depune candidatura pentru post. Robotul lucrează bine, dar trebuie să implementeze și eat(), cu... ceva. Răspunsurile fără sens ca acesta sunt semnătura unei interfețe supraîncărcate.

Robotul obligat să mănânce

Robotul implementează eat() doar pentru că interfața o cere. Pauza de masă afișează un răspuns care nu ar trebui să existe niciodată — clasa a fost obligată să mintă.

Prompt
Scrie un program TypeScript care arată o încălcare a Segregării Interfețelor: o interfață Worker supraîncărcată cu metodele work și eat, o clasă Human care le face pe amândouă și o clasă Robot obligată să implementeze eat cu un răspuns fără sens. Rulează un schimb de lucru și o pauză de masă peste amândouă, ca să se vadă minciuna la care este forțat robotul.
Ieșire: program TypeScript și rezultatul capturat

Împarte interfața

Împarte interfața supraîncărcată în Worker și Eater. Omul le implementează pe amândouă; robotul implementează doar Worker. Schimbul de lucru primește muncitori, pauza de masă primește mâncători — robotul pur și simplu nu este invitat niciodată la masă și nicio metodă nu minte.

Fiecare tip implementează doar adevărul său

Două interfețe mici în loc de una supraîncărcată. Robotul nu mai are deloc o metodă eat() — verificatorul de tipuri îl ține automat în afara pauzei de masă.

Prompt
Repară interfața supraîncărcată în TypeScript împărțind-o: o interfață Worker cu work și o interfață Eater cu eat. Human le implementează pe amândouă, Robot doar Worker. Rulează schimbul de lucru cu amândouă și pauza de masă doar cu cei care mănâncă.
Ieșire: program TypeScript și rezultatul capturat
Each type implements only its truth

Piesele mici se compun

Interfețele mici nu sunt o limitare — ele se combină. Când o funcție chiar are nevoie de ambele capacități, le compune pe loc într-o singură interfață: Worker plus Eater.

Acesta este modelul spre care să țintești: definește interfețe mici și lasă-l pe cel care are nevoie de mai mult să le lipească împreună cu extends.

Compune atunci când ai nevoie de amândouă

WorkingEater este construită din cele două interfețe mici. Schimbul de o zi întreagă are nevoie de ambele capacități, așa că doar omul se califică — spus o singură dată, în sistemul de tipuri.

Prompt
Arată compunerea interfețelor în TypeScript: combină interfețele mici Worker și Eater într-o interfață WorkingEater cu extends și scrie o funcție fullDay care o cere, astfel încât doar Human să se potrivească. Afișează ziua completă a omului.
Ieșire: program TypeScript și rezultatul capturat