Result/Either शैली के प्रकार
Result/Either यूनियन की सहायता से सफलता और विफलता को स्पष्ट रूप से मॉडल करें, सहायक फ़ंक्शन (map/flatMap/mapError) जोड़ें और हर जगह try/catch के बिना प्रवाह को पूर्वानुमेय बनाए रखें।
Result/Either शैली के प्रकार, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 2 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 2 पाठ शामिल हैं।
परिचय
लक्ष्य: विफलताओं को दृश्य बनाएँ। आप परिणामों को भेदयुक्त संघ से मॉडल करेंगे, सहायकों के साथ संयोजन करेंगे और सीमा पर अपवादों को बदलेंगे।
- परिणाम प्रकार
- map/flatMap/mapError
- एचटीटीपी एकीकरण
परिणाम का आधार
एक छोटी परिणाम उपयोगिता बनाएँ: ok/err निर्माता और संयोजन के लिए map, flatMap, mapError।
export type Ok<T> = { ok: true; value: T }
export type Err<E> = { ok: false; error: E }
export type Result<T, E> = Ok<T> | Err<E>
export const ok = <T>(value: T): Ok<T> => ({ ok: true, value })
export const err = <E>(error: E): Err<E> => ({ ok: false, error })
export function map<T, E, U>(r: Result<T, E>, f: (t: T) => U): Result<U, E> {
return r.ok ? ok(f(r.value)) : r
}
export function flatMap<T, E, U>(r: Result<T, E>, f: (t: T) => Result<U, E>): Result<U, E> {
return r.ok ? f(r.value) : r
}
export function mapError<T, E, F>(r: Result<T, E>, g: (e: E) => F): Result<T, F> {
return r.ok ? r : err(g(r.error))
}डोमेन त्रुटियाँ
डोमेन त्रुटियों को tag वाले भेदयुक्त संघ के रूप में मॉडल करें। अच्छे संदेशों के लिए प्रत्येक शाखा सटीक डेटा रखती है।
export type CreateUserError =
| { tag: "InvalidEmail"; detail?: string }
| { tag: "Duplicate"; email: string }
export function validateEmail(email: string): Result<string, CreateUserError> {
const okEmail = /.+@.+/.test(email)
return okEmail ? ok(email.toLowerCase()) : err({ tag: "InvalidEmail", detail: "bad format" })
}
const existing = new Set(["ada@example.com"]) // pretend DB
export function saveUser(email: string): Result<{ id: string }, CreateUserError> {
if (existing.has(email)) return err({ tag: "Duplicate", email })
return ok({ id: Math.random().toString(36).slice(2) })
}प्रवाहों का संयोजन
सत्यापनों का संयोजन flatMap से करें। कंपाइल-समय पर पूर्णता लागू करने के लिए never जाँच के साथ एक स्विच का उपयोग करें।
export function createUser(flowEmail: string) {
return flatMap(validateEmail(flowEmail), email => saveUser(email))
}
// Use
const r = createUser("Ada@example.com")
if (r.ok) {
console.log("id:", r.value.id)
} else {
switch (r.error.tag) {
case "InvalidEmail": console.error("invalid email:", r.error.detail); break
case "Duplicate": console.error("already used:", r.error.email); break
default: ((x: never) => x)(r.error) // exhaustiveness
}
}अपवाद → परिणाम
इनपुट/आउटपुट सीमाओं पर अपवादों को लपेटकर उन्हें Result में बदलें। कॉल करने वालों के पास संभालने के लिए त्रुटि का एक ही मार्ग रहता है।
export async function fromPromise<T>(p: Promise<T>): Promise<Result<T, { tag: "Exception"; message: string }>> {
try { return ok(await p) }
catch (e) { return err({ tag: "Exception", message: e instanceof Error ? e.message : String(e) }) }
}
// Example: wrap a fetch
export async function fetchJson<T>(url: string): Promise<Result<T, { tag: "Exception"; message: string }>> {
return fromPromise(fetch(url).then(r => r.json() as T))
}एचटीटीपी मैपिंग के सुझाव
एचटीटीपी एकीकरण: डोमेन त्रुटियों को 400/409 और इनपुट/आउटपुट अपवादों को 502/503 में मैप करें। एक छोटा मैपर फ़ंक्शन रखें, ताकि नियंत्रक साफ़ और पूर्वानुमेय बने रहें।
परिणाम के लाभ की जाँच
त्वरित जाँच: भेदयुक्त परिणाम संघ को प्राथमिकता क्यों दें?
पुनरावलोकन
पुनरावलोकन: एक छोटा परिणाम प्रकार परिभाषित करें, map/flatMap से संयोजन करें, डोमेन त्रुटियों को संघों के रूप में मॉडल करें और सीमाओं पर अपवादों को बदलें।
एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 101
- पाठ
- 352
अक्सर पूछे जाने वाले प्रश्न
क्या “Result/Either शैली के प्रकार” पाठ निःशुल्क है?
हाँ—“Result/Either शैली के प्रकार” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 2 पाठ शामिल हैं।
“Result/Either शैली के प्रकार” में मैं क्या सीखूँगा?
Result/Either यूनियन की सहायता से सफलता और विफलता को स्पष्ट रूप से मॉडल करें, सहायक फ़ंक्शन (map/flatMap/mapError) जोड़ें और हर जगह try/catch के बिना प्रवाह को पूर्वानुमेय बनाए रखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 2 में से 1वाँ पाठ है।
“Result/Either शैली के प्रकार” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Result/Either शैली के प्रकार
- विभेदित यूनियन के साथ पूर्ण त्रुटि-प्रबंधन