संकलन-समय इनपुट सत्यापन
रनटाइम से पहले गलत DSL एक्सप्रेशन अस्वीकार करें।
संकलन-समय इनपुट सत्यापन, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
संकलन-समय इनपुट मान्यता
टाइप-स्तरीय DSL रनटाइम से पहले गलत अभिव्यक्तियों को अस्वीकार कर सकते हैं। टेम्पलेट लिटरल और सशर्त प्रकारों का उपयोग करके हम स्ट्रिंग की संरचना को टाइप-स्तर पर मान्य करते हैं और अमान्य इनपुट को अस्वीकार करते हैं।
उदाहरण: एक छोटी चयनकर्ता भाषा
कल्पना कीजिए कि आप "user.name" या "order.items.length" जैसी स्ट्रिंग स्वीकार करते हैं। हम संकलन-समय पर "user." या ".name" को अस्वीकार करना चाहते हैं।
टेम्पलेट लिटरल्स से पार्स करना
टेम्पलेट लिटरल प्रकार infer का उपयोग करके किसी स्ट्रिंग को भागों में बाँटते हैं और संकलन-समय पर पार्स करने की नींव तैयार करते हैं। वास्तविक पैटर्न बैकटिक से सीमाबद्ध होता है (अनुमान के साथ हेड, डॉट और टेल); इस विभाजन मिलानकर्ता को हम DotSplit कहते हैं।
// Real TS: backtick pattern matching Head, ".", Tail.
type Split<S extends string> =
S extends DotSplit<infer Head, infer Tail>
? [Head, ...Split<Tail>]
: [S];
type P = Split<"a.b.c">; // ["a", "b", "c"]हर खंड को मान्य करना
एक सशर्त प्रकार जाँचता है कि कोई भी खंड खाली न हो। खाली खंड इनपुट को अमान्य दर्शाता है। यही DotSplit पैटर्न (वास्तविक कोड में बैकटिक वाला टेम्पलेट लिटरल) पुनरावृत्ति को चलाता है।
type NonEmpty<S extends string> = S extends "" ? false : true;
type Valid<S extends string> =
S extends DotSplit<infer H, infer T>
? H extends "" ? false : Valid<T>
: NonEmpty<S>;
type V1 = Valid<"a.b">; // true
type V2 = Valid<"a.">; // falseवैधता पर एपीआई को निर्भर करना
फ़ंक्शन पैरामीटर को सीमित करने के लिए वैधता प्रकार का उपयोग करें: वैध स्ट्रिंग अपना प्रकार बनाए रखती हैं; अवैध स्ट्रिंग never में बदल जाती हैं, इसलिए कॉल संकलित नहीं होती।
declare function path<S extends string>(
p: Valid<S> extends true ? S : never
): void;
path("user.name"); // ok
path("user."); // Error: argument is neverअज्ञात टोकन अस्वीकार करना
आप अनुमत वर्णों को भी सीमित कर सकते हैं। केवल ज्ञात खंड प्रतिरूपों से मिलान करें; बाकी सब अस्वीकार करने वाले प्रकार में बदल जाता है।
type Allowed = "user" | "order" | "name" | "items";
type CheckSeg<S extends string> = S extends Allowed ? true : false;ऑपरेटरों का सत्यापन
"age > 18" जैसे अभिव्यक्ति DSL के लिए, टेम्पलेट लिटरल से ऑपरेटर का मिलान करें और सुनिश्चित करें कि वह अनुमत समुच्चय में है। मिलानकर्ता (बायाँ स्पेस O स्पेस दायाँ) वास्तविक कोड में बैकटिक टेम्पलेट लिटरल है; यहाँ हम इसे CondMatch कहते हैं।
type Op = ">" | "<" | "=" | ">=" | "<=";
// Real TS: backtick pattern -> left, " ", infer O, " ", right.
type IsCond<S extends string> =
S extends CondMatch<infer O>
? O extends Op ? true : false
: false;
type C1 = IsCond<"age > 18">; // true
type C2 = IsCond<"age ! 18">; // falseजाँचों को संयोजित करना
वास्तविक सत्यापक कई शर्तों को एक साथ मिलाते हैं: गैर-रिक्त खंड, अनुमत टोकन और संतुलित संरचना। प्रत्येक एक सशर्त प्रकार है; इन्हें तार्किक शैली वाले सहायक प्रकारों से संयोजित करें।
type And<A, B> = A extends true ? (B extends true ? true : false) : false;पुनरावृत्ति की सीमाएँ
प्रकार-स्तरीय पुनरावृत्ति की गहराई सीमित होती है। बहुत लंबी स्ट्रिंग के लिए संकलक "type instantiation is excessively deep" त्रुटि दे सकता है। पार्स किए जाने वाले इनपुट की लंबाई सीमित रखें या व्याकरण को सरल बनाएँ।
रनटाइम पार्सिंग से बेहतर
रनटाइम पार्सर केवल तब शिकायत करता है जब गलत स्ट्रिंग का मूल्यांकन किया जाता है। संकलन-समय सत्यापन आपके स्ट्रिंग लिटरल टाइप करते ही उसे अस्वीकार कर देता है, संपादक की पूरी प्रतिक्रिया के साथ और रनटाइम पर बिना किसी लागत के।
यह क्यों महत्वपूर्ण है
कई DSL स्ट्रिंग इनपुट स्वीकार करते हैं (पथ, क्वेरी और प्रारूप)। प्रकार प्रणाली में उनकी संरचना का सत्यापन टाइपो और गलत अभिव्यक्तियों को प्रोग्राम चलने से पहले पकड़ लेता है और रनटाइम त्रुटियों की एक श्रेणी को संकलन त्रुटियों में बदल देता है।
त्वरित जाँच
संकलन-समय इनपुट सत्यापन की अपनी समझ जाँचें।
पुनरावलोकन
आपने टेम्पलेट लिटरल प्रकारों और infer से स्ट्रिंग लिटरल को पार्स करके DSL इनपुट का रनटाइम से पहले सत्यापन किया, फिर सशर्त प्रकारों से खंडों और ऑपरेटरों की जाँच की। फ़ंक्शन पैरामीटर को वैधता प्रकार पर निर्भर करने से गलत अभिव्यक्तियाँ never में बदल जाती हैं और संकलन विफल हो जाता है; इसमें पुनरावृत्ति की सीमाओं का ध्यान रखना आवश्यक है।
एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 101
- पाठ
- 352
अक्सर पूछे जाने वाले प्रश्न
क्या “संकलन-समय इनपुट सत्यापन” पाठ निःशुल्क है?
हाँ—“संकलन-समय इनपुट सत्यापन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“संकलन-समय इनपुट सत्यापन” में मैं क्या सीखूँगा?
रनटाइम से पहले गलत DSL एक्सप्रेशन अस्वीकार करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“संकलन-समय इनपुट सत्यापन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- प्रकार-स्तरीय DSL क्या है
- फ्लुएंट क्वेरी DSL डिज़ाइन करना
- संकलन-समय इनपुट सत्यापन
- प्रकार-स्तरीय DSL में त्रुटि संदेश