TypeScript Academy · पाठ

फ़ंक्शन सीमाओं के पार यूनियन को परिष्कृत करना

डिस्क्रिमिनेटेड यूनियन, प्रेडिकेट रिटर्न और Result-शैली के प्रकारों से फ़ंक्शन सीमाओं के पार सुरक्षित नैरोइंग बनाए रखें।

पाठ 3, कुल 3 में से8 चरण

फ़ंक्शन सीमाओं के पार यूनियन को परिष्कृत करना, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 3 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

परिचय

लक्ष्य: टैग वाले यूनियन, शर्त-जाँच परिणामों और सत्यापन सहायक फ़ंक्शन का उपयोग करके फ़ंक्शन कॉल के दौरान अपना प्रकार-सीमांकन बनाए रखना।

  • कॉल स्थानों पर कोई असुरक्षित as नहीं
  • परिष्करण डेटा के साथ आगे बढ़ते हैं

टैग वाला यूनियन परिणाम

Result पैटर्न: कॉल करने वाला ok जाँचकर प्रकार सीमित करता है। कोई कास्ट नहीं, नियंत्रण प्रवाह स्पष्ट।

type Ok<T> = { ok: true; value: T }
type Err = { ok: false; error: string }

type Result<T> = Ok<T> | Err

function parseIntSafe(s: string): Result<number> {
  const n = Number(s)
  return Number.isFinite(n) ? { ok: true, value: n } : { ok: false, error: "NaN" }
}

function useIt(s: string) {
  const r = parseIntSafe(s)
  if (r.ok) {
    // r is Ok<number>
    return r.value * 2
  }
  // r is Err
  return `bad: ${r.error}`
}

शर्त-जाँच परिणाम

शर्त-जाँच परिणाम (x is T) जाँचों को एक जगह रखते हैं और कॉल स्थानों पर प्रकार-परिष्करण बनाए रखते हैं।

type User = { id: number; name: string }

type MaybeUser = User | null

function hasUser(x: MaybeUser): x is User {
  return x !== null
}

function greet(x: MaybeUser) {
  if (hasUser(x)) {
    // x narrowed to User
    return `Hello ${x.name}`
  }
  return "Anonymous"
}

परिष्करण को आगे भेजना

गार्ड (जैसे, isCircle) से प्रकार सीमित करें, फिर मान को आगे भेजें; बाद के फ़ंक्शन को अधिक संकीर्ण प्रकार दिखाई देगा।

type Shape =
  | { kind: "circle"; radius: number }
  | { kind: "square"; size: number }

function isCircle(s: Shape): s is Extract<Shape, { kind: "circle" }> {
  return s.kind === "circle"
}

function area(s: Shape) {
  if (isCircle(s)) {
    // s is circle here
    return Math.PI * s.radius * s.radius
  }
  return s.size * s.size
}

सीमा पर सत्यापन

सीमा पर सत्यापन करें और Valid/Invalid लौटाएँ; कॉल करने वाले टैग के आधार पर प्रकार सीमित करके पूरी तरह प्रकार-सहित डेटा पाते हैं।

type Payload = { email: string; retries?: number }

type Valid = { ok: true; data: Required<Payload> }
type Invalid = { ok: false; issues: string[] }

type Validation = Valid | Invalid

function validate(p: unknown): Validation {
  const issues: string[] = []
  if (typeof p !== "object" || p === null) return { ok: false, issues: ["not an object"] }
  const x = p as any
  if (typeof x.email !== "string") issues.push("email:string")
  if (x.retries !== undefined && typeof x.retries !== "number") issues.push("retries:number")
  if (issues.length) return { ok: false, issues }
  return { ok: true, data: { email: x.email, retries: x.retries ?? 0 } }
}

function handle(p: unknown) {
  const v = validate(p)
  if (!v.ok) return `bad: ${v.issues.join(",")}`
  // v.data is fully typed here
  return `send to ${v.data.email} (${v.data.retries})`
}

सुझाव

सर्वोत्तम तरीके:

  • छोटे, स्थिर टैग (ok, kind) को प्राथमिकता दें
  • जाँचों को शर्त-जाँच सहायक फ़ंक्शन में एक जगह रखें
  • कॉल स्थानों पर सभी मामलों वाले switch का उपयोग करें
  • any और असुरक्षित कास्ट से बचें

सीमाओं के पार प्रकार-सीमांकन

त्वरित जाँच: फ़ंक्शन की सीमाओं के पार प्रकार-सीमांकन को सबसे अच्छी तरह कौन-सा पैटर्न सुरक्षित रखता है?

पुनरावलोकन

पुनरावलोकन: परिष्करण को डेटा (Result) के रूप में साथ ले जाएँ, सीमाओं पर सत्यापन करें और असुरक्षित कास्ट से बचें; कॉल करने वाले सरल टैग-जाँच के माध्यम से प्रकार सीमित करते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
101
पाठ
352

अक्सर पूछे जाने वाले प्रश्न

क्या “फ़ंक्शन सीमाओं के पार यूनियन को परिष्कृत करना” पाठ निःशुल्क है?

हाँ—“फ़ंक्शन सीमाओं के पार यूनियन को परिष्कृत करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

“फ़ंक्शन सीमाओं के पार यूनियन को परिष्कृत करना” में मैं क्या सीखूँगा?

डिस्क्रिमिनेटेड यूनियन, प्रेडिकेट रिटर्न और Result-शैली के प्रकारों से फ़ंक्शन सीमाओं के पार सुरक्षित नैरोइंग बनाए रखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 3वाँ पाठ है।

“फ़ंक्शन सीमाओं के पार यूनियन को परिष्कृत करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. पूर्ण switch और never जाँच
  2. प्रेडिकेट फ़ंक्शन और satisfies ऑपरेटर
  3. फ़ंक्शन सीमाओं के पार यूनियन को परिष्कृत करना
← TypeScript Academy पर वापस जाएँ