ਇੱਕ ਭੇਦਭਾਵ ਯੁਕਤ (ਟੈਗ ਕੀਤਾ) ਯੂਨੀਅਨ ਆਬਜੈਕਟ ਕਿਸਮਾਂ ਦਾ ਇੱਕ ਯੂਨੀਅਨ ਹੈ ਜੋ ਸਾਰੇ ਇੱਕ ਆਮ ਲਾਜ਼ਮੀ ਖੇਤਰ ਨੂੰ ਸਾਂਝਾ ਕਰਦੇ ਹਨ — ਭੇਦਭਾਵ — ਜਿਸ ਨੂੰ ਕੰਪਾਈਲਰ ਵੇਰੀਏਂਟਾਂ ਨੂੰ ਵੱਖ ਕਰਨ ਅਤੇ ਸੁਰੱਖਿਤ ਢੰਗ ਨਾਲ ਤੰਗ ਕਰਨ ਲਈ ਵਰਤਦਾ ਹੈ।
=
| { : }
| { : ; : }
| { : ; : };
ਇੱਕ ਭੇਦਭਾਵ ਯੁਕਤ (ਟੈਗ ਕੀਤਾ) ਯੂਨੀਅਨ ਆਬਜੈਕਟ ਕਿਸਮਾਂ ਦਾ ਇੱਕ ਯੂਨੀਅਨ ਹੈ ਜੋ ਸਾਰੇ ਇੱਕ ਆਮ ਲਾਜ਼ਮੀ ਖੇਤਰ ਨੂੰ ਸਾਂਝਾ ਕਰਦੇ ਹਨ — ਭੇਦਭਾਵ — ਜਿਸ ਨੂੰ ਕੰਪਾਈਲਰ ਵੇਰੀਏਂਟਾਂ ਨੂੰ ਵੱਖ ਕਰਨ ਅਤੇ ਸੁਰੱਖਿਤ ਢੰਗ ਨਾਲ ਤੰਗ ਕਰਨ ਲਈ ਵਰਤਦਾ ਹੈ।
=
| { : }
| { : ; : }
| { : ; : };
ਹਰੇਕ ਮੈਂਬਰ ਕੋਲ ਇੱਕ 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 ਅਸਾਈਨਮੈਂਟ ਤੁਹਾਨੂੰ ਹਰੇਕ ਕੇਸ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਮਜਬੂਰ ਕਰਦਾ ਹੈ — ਇੱਕ ਨਵਾਂ ਸਥਿਤੀ ਸ਼ਾਮਿਲ ਕਰੋ ਅਤੇ ਕੰਪਾਈਲਰ ਤੁਹਾਨੂੰ ਹਰੇਕ switch ਤੱਕ ਪੁਆਇੰਟ ਕਰਦਾ ਹੈ ਜਿਸ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।
ਭੇਦਭਾਵ ਯੁਕਤ ਯੂਨੀਅਨ ਅਵਸਥਾ (loading/success/error), ਘਟਨਾਵਾਂ/ਕਾਰਵਾਈਆਂ (Redux reducers), ਅਤੇ ਕਿਸੇ ਵੀ "ਕਈ ਰੂਪਾਂ ਵਿੱਚੋਂ ਇੱਕ" ਡੇਟਾ ਮੁਡੇਲ ਕਰਨ ਦਾ ਵਾਕਈ idiomatic ਤਰੀਕਾ ਹੈ।
ਉਹ ਅਮਾਨਤ ਅਵਸਥਾਵਾਂ ਨੂੰ ਅਸੰਭਵ ਬਣਾ ਦਿੰਦੇ ਹਨ ਅਤੇ, never ਟ੍ਰਿਕ ਦੇ ਨਾਲ, ਤੁਹਾਨੂੰ ਸੰਕਲਨ-ਸਮੇਂ ਬਾਸ-ਤਾਗ — ਲੀਕ boolean/optional-ਖੇਤਰ ਮਾਡਲਿੰਗ ਤੁਲਨਾ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਦੀ ਵਿਸ਼ਾਲ ਜਿੱਤ ਦਿੰਦੇ ਹਨ।