A discriminated (tagged) union ni unioni ya aina za kitu ambazo zote zinashiriki sehemu ya literal ya kawaida — discriminant — ambayo kicukizi kinatumia kutenganisha variants na kuingia kwa usalama.
=
| { : }
| { : ; : }
| { : ; : };
A discriminated (tagged) union ni unioni ya aina za kitu ambazo zote zinashiriki sehemu ya literal ya kawaida — discriminant — ambayo kicukizi kinatumia kutenganisha variants na kuingia kwa usalama.
=
| { : }
| { : ; : }
| { : ; : };
Kila mwanzo ana status literal. Kuangalia inakamatia kwa hasa variant moja, kufungua sehemu za variant hiyo:
function render(r: Result) {
switch (r.status) {
case "loading": return "...";
case "success": return r.data; // ✅ data exists only here
case "error": return r.message; // ✅ message exists only here
}
}
Kikwa unajaribu kufikia r.data katika kesi ya loading, ni kosa la kukusanya — mfumo wa aina unafanya michanganyiko batili isiyowezekana kuwakilisha.
function render2(r: Result): string {
switch (r.status) {
case "loading": return "...";
case "success": return r.data;
case "error": return r.message;
default:
const _exhaustive: never = r; // ✅ if you add a variant and forget a case, this errors
return _exhaustive;
}
}
Kuteuza never kunakubadilisha kuhandle kila kesi — ongeza status mpya na kicukizi kinaonyesha kila switch inayohitaji kusasishwa.
Unioni zilizogawanyika ni njia ya idiomatiki ya kuiga hali (loading/success/error), matukio/vitendo (Redux reducers), na data yoyote "moja ya maumbo kadhaa".
Zinafanya hali haba kuwa haiwezekani na, na hila ya never, zinakupa kuangalia utoshelevu wa wakati wa kukusanya — serikali kubwa ya usalama inayoliko juu ya boolean suluhu/kwa hiari ya sehemu ya uundaji.
Maktaba ya maswali ya mahojiano ya IT yenye majibu ya kina — kutoka Junior hadi Senior.
Changia