પ્રભેદી (ટૅગ કરેલ) સંઘ એ ઑબ્જેક્ટ પ્રકારોનો સંઘ છે જે તમામ એક સામાન્ય શાબ્દિક ક્ષેત્ર શેર કરે છે — પ્રભેદક — જેનો ઉપયોગ કમ્પાઇલર વિવિધતાઓને અલગ કરવા અને સુરક્ષિત રીતે સાંકુચિત કરવા માટે કરે છે.
=
| { : }
| { : ; : }
| { : ; : };
પ્રભેદી (ટૅગ કરેલ) સંઘ એ ઑબ્જેક્ટ પ્રકારોનો સંઘ છે જે તમામ એક સામાન્ય શાબ્દિક ક્ષેત્ર શેર કરે છે — પ્રભેદક — જેનો ઉપયોગ કમ્પાઇલર વિવિધતાઓને અલગ કરવા અને સુરક્ષિત રીતે સાંકુચિત કરવા માટે કરે છે.
=
| { : }
| { : ; : }
| { : ; : };
પ્રત્યેક સભ્યનો status શાબ્દિક છે. તેને ચેક કરવાથી બરાબર એક વિવિધતા સુધી સાંકુચિત થાય છે, તે વિવિધતાના ક્ષેત્રોને અનલૉક કરે છે:
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
}
}
જો તમે loading કેસમાં r.data એક્સેસ કરવાનો પ્રયાસ કરો, તો તે સંકલન ભૂલ છે — પ્રકાર સિસ્ટમ અમાન્ય સંયોજનો અપ્રતિનિધિત્વશીલ બનાવે છે.
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;
}
}
never એસાઇનમેન્ટ તમને દરેક કેસ હેન્ડલ કરવા માટે ફરજ પાડે છે — નવો status ઉમેરો અને કમ્પાઇલર તમને દરેક switch પર નિર્દેશ કરે છે જેને અપડેટ કરવાની જરૂર છે.
પ્રભેદી સંઘ એ અવસ્થાને મોડેલ કરવા (લોડિંગ/સફળતા/ભૂલ), ઇવેન્ટ્સ/ક્રિયાઓ (Redux reducers), અને કોઈપણ "એક સમયે એક આકાર" ડેટાનો રીતિસર્વસ્વ અભિગમ છે.
તેઓ આইલીગલ સ્ટેટ્સ અશક્ય બનાવે છે અને, never ટ્રિક સાથે, તમને કમ્પાઇલ-ટાઇમ વ્યાપકતા આપે છે — લૂઝ boolean/optional-field મોડેલિંગ પર વિશાળ સુરક્ષા જીત.