Kodokon kodokon.com

Enums और const assertions: आधुनिक विकल्प

enums की सीमाओं को समझें और as const के साथ frozen constants से अपने types प्राप्त करें।

7 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

enum शुरुआती दिनों से ही भाषा का हिस्सा रहा है, और आप इसे कई codebases में देखेंगे। यह नामित constants को एक ही type के तहत समूहित करता है, जिसे value और annotation दोनों के रूप में इस्तेमाल किया जा सकता है।

TYPESCRIPT
enum Role {
  User = "USER",
  Admin = "ADMIN",
}

function canDelete(role: Role): boolean {
  return role === Role.Admin;
}
एक क्लासिक string enum

फिर भी आधुनिक ecosystem इससे दूर जा रहा है। एक enum ऐसा syntax है जो JavaScript में मौजूद नहीं है: compiler runtime पर एक object उत्सर्जित करता है, जो कुछ tools को जटिल बना देता है और erasableSyntaxOnly option के साथ असंगत है। विकल्प: as const से frozen किया गया एक सामान्य object, जिससे आप type प्राप्त करते हैं।

TYPESCRIPT
const ROLES = {
  User: "USER",
  Admin: "ADMIN",
} as const;

type Role = (typeof ROLES)[keyof typeof ROLES];

function canDelete(role: Role): boolean {
  return role === ROLES.Admin;
}
एक derived type वाला as const object, आधुनिक समकक्ष

as const arrays पर भी काम करता है: हर element एक read-only literal बन जाता है, और (typeof SIZES)[number] values का union बनाता है। सत्य का एक ही स्रोत चलने वाले code और types दोनों को भोजन देता है।

TYPESCRIPT
const SIZES = ["sm", "md", "lg"] as const;

type Size = (typeof SIZES)[number];

function isSize(value: string): value is Size {
  return (SIZES as readonly string[]).includes(value);
}
एक as const array: runtime पर iterable, type level पर एक union

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. कौन-सा बड़ा अंतर एक enum को as const से frozen किए गए object से अलग करता है?
    • एक enum TypeScript-विशिष्ट syntax है जो code उत्पन्न करता है, जबकि एक as const object सामान्य JavaScript ही रहता है
    • एक as const object runtime पर धीमा होता है
    • एक enum में केवल numbers हो सकते हैं
  2. ['sm', 'md'] array पर लागू करने पर as const क्या उत्पन्न करता है?
    • string[]
    • literal types का एक read-only tuple
    • Array<'sm' | 'md'> type का एक mutable array
    • एक compile error
  3. as const से frozen किए गए ROLES object की values का union आप कैसे प्राप्त करते हैं?
    • keyof typeof ROLES
    • (typeof ROLES)[keyof typeof ROLES]
    • typeof ROLES