Option Type Pattern की जानकारी
In this page:
type Option<T> = { some: true; value: T } | { some: false };
Defining an Option Type
एक Option type आमतौर पर दो states represent करता है: Some, एक present value को wrap करते हुए, और None, एक absence represent करते हुए — यह 'maybe there's a value' को कुछ ऐसा बना देता है जिसे type system actually enforce कर सके।
उदाहरण: Defining an Option Type
type Option<T> = { kind: "some"; value: T } | { kind: "none" };
const present: Option<number> = { kind: "some", value: 5 };
console.log(present);
Creating Some and None
some(value) और none() जैसे Helper functions Option values को बनाने में concise रखते हैं जबकि उनके generic type parameter को preserve करते हैं, इसलिए TypeScript को अब भी exactly पता रहता है कि अंदर किस type की value हो सकती है।
उदाहरण: Creating Some and None
type Option<T> = { kind: "some"; value: T } | { kind: "none" };
function some<T>(value: T): Option<T> { return { kind: "some", value }; }
function none<T>(): Option<T> { return { kind: "none" }; }
console.log(some(5), none<number>());
Checking an Option
value access करने से पहले discriminant field check करें ताकि TypeScript union को safely narrow कर सके — बिना check किए सीधे एक Option में पढ़ना exactly वह mistake है जिसे रोकने के लिए यह pattern है।
उदाहरण: Checking an Option
type Option<T> = { kind: "some"; value: T } | { kind: "none" };
function describe(opt: Option<number>): string {
return opt.kind === "some" ? `Value: ${opt.value}` : "No value";
}
console.log(describe({ kind: "some", value: 5 }));
Option Helper Operations
Helper operations एक Option की value निकाल सकते हैं या जब वह absent हो तो एक default पर fall back कर सकते हैं, null checks की एक scattered chain को एक composable operation से replace करते हुए।
उदाहरण: Option Helper Operations
type Option<T> = { kind: "some"; value: T } | { kind: "none" };
function getOrElse<T>(opt: Option<T>, fallback: T): T {
return opt.kind === "some" ? opt.value : fallback;
}
console.log(getOrElse<number>({ kind: "none" }, 0));
When to Use Option
Option सबसे उपयोगी है जब absence एक पूरी तरह normal, expected outcome हो — एक ऐसा item ढूंढना जो exist न करे, या एक configuration value पढ़ना जो genuinely optional है — बजाय उस absence को एक exceptional error मानने के।
उदाहरण: When to Use Option
type Option<T> = { kind: "some"; value: T } | { kind: "none" };
function findConfig(key: string): Option<string> {
return key === "theme" ? { kind: "some", value: "dark" } : { kind: "none" };
}
console.log(findConfig("theme"));
- बिना
kind === "some"check किएopt.valueपढ़ना, जो एक compile error है। - एक जगह
nullऔर दूसरी जगहOptionउपयोग करना, जो code को inconsistent बनाता है। none<T>()को इसका type argument देना भूल जाना इसलिए यहOption<unknown>बन जाता है।
try/catchTypeScript में काम करता है, और caught errors को उनके types ध्यान में रखते हुए handle किया जाना चाहिए।- Custom error classes आपको meaningful, specific error types बनाने देती हैं।
- Result और Option type patterns type system में success, failure, और missing values को explicitly represent करते हैं।
Chapter Quiz — Complete all 5 topics to unlock
0/5 topics done
Complete these topics first: