कोड जनरेटर · 6 मिनट पढ़ें
JSON से TypeScript: ऐसे प्रकार जो वास्तविकता से मेल खाते हैं
किसी API के लिए सही TypeScript प्रकार प्राप्त करने का सबसे तेज़ तरीका उन्हें उस प्रतिक्रिया से उत्पन्न करना है जो API वास्तव में लौटाई गई है। हस्तलिखित इंटरफ़ेस आपके अपेक्षित पेलोड का वर्णन करते हैं; JSON से TypeScript रूपांतरण आपके पास मौजूद पेलोड का वर्णन करता है, और उन दोनों के बीच का अंतर वह स्थान है जहां रनटाइम क्रैश रहते हैं।
अद्यतन
हस्तलिखित प्रकार क्यों भटकते हैं?
दस्तावेज़ीकरण या मेमोरी से लिखे गए इंटरफ़ेस आशावादी होते हैं। वे मौजूद हर चीज़ को चिह्नित करते हैं, मान लेते हैं कि एक अशक्त फ़ील्ड हमेशा मौजूद होती है, और चुपचाप नेस्टेड ऑब्जेक्ट को छोड़ देते हैं जो केवल प्रीमियम खातों पर दिखाई देता है। TypeScript फिर एक ऐसे आकार को लागू करता है जिसका सर्वर ने कभी वादा नहीं किया था, और पहली `undefined` संकलन समय के बजाय उत्पादन में सामने आती है। वास्तविक प्रतिक्रियाओं से उत्पन्न होने से प्रक्रिया उलट जाती है: संकलक अपेक्षित आकार के बजाय देखे गए आकार की जाँच कर रहा है।
जेनरेट की गई फ़ाइल को पढ़ना
एक उपयोगी रूपांतरण नेस्टेड ऑब्जेक्ट को उनकी कुंजियों के बाद नाम देता है, सरणी तत्व प्रकारों को बरकरार रखता है, और अनिश्चितता को स्पष्ट रूप से व्यक्त करता है। उन तीन मार्करों पर ध्यान दें जो सभी अर्थ रखते हैं:
export interface Order {
id: string;
total: number;
coupon?: string; // absent in some responses
shippedAt: string | null; // present but null until shipped
items: Array<OrderItem>;
}
`coupon?: string` और `shippedAt: string | null` के बीच का अंतर कॉस्मेटिक नहीं है। वैकल्पिक का अर्थ है कि कुंजी गुम हो सकती है; शून्य का अर्थ है कि कुंजी वहां बिना किसी मूल्य के मौजूद है। एपीआई दोनों काम करते हैं, अक्सर एक ही पेलोड में, और उन्हें मिलाने से कोड में एक शून्य जांच होती है जो एक स्ट्रिंग मानती है।
एक से अधिक नमूने का प्रयोग करें
एक एकल प्रतिक्रिया आवश्यक सभी चीज़ों को चिह्नित करती है। दो या तीन प्रतिक्रियाएँ चिपकाएँ - आदर्श रूप से एक खाली खाते से और एक पूर्ण से - और वैकल्पिक कुंजियाँ स्वयं प्रकट होती हैं: किसी भी नमूने से गायब फ़ील्ड `?` बन जाती है, और एक फ़ील्ड जो कभी-कभी शून्य होती है वह `null` के साथ एक संघ बन जाती है। यह उपलब्ध सबसे सस्ता शुद्धता उन्नयन है, और यही कारण है कि उत्पन्न प्रकारों को एक बार लिखे जाने के बजाय API बदलने पर पुन: उत्पन्न किया जाना चाहिए।
जेनरेट किए गए इंटरफ़ेस को कभी भी अपने API का एकमात्र विवरण न बनने दें। इसके साथ एक स्कीमा या अनुबंध परीक्षण रखें, ताकि सर्वर परिवर्तन उपयोगकर्ता सत्र के बजाय बिल्ड को विफल कर दे।
प्रकार कहां हैं
- एक समर्पित `types/` या `api/` फ़ोल्डर, घटकों के माध्यम से बिखरा हुआ नहीं।
- प्रति समापन बिंदु या प्रति संसाधन एक फ़ाइल, जिसमें समापन बिंदु और उसे कैप्चर किए जाने की तारीख बताने वाली टिप्पणी होती है।
- एक पुनर्जनन नोट: किस कॉल ने पेलोड उत्पन्न किया, ताकि अगला व्यक्ति इसे दोहरा सके।
- एक निर्यात का उपभोग फ़ेच परत और घटकों दोनों द्वारा किया जाता है, इसलिए एक परिवर्तन बिल्कुल एक स्थान पर टूट जाता है।
सख्त मोड चालू करें
जेनरेट किए गए प्रकार केवल `strict` सक्षम होने पर ही भुगतान करते हैं, क्योंकि यही वह चीज़ है जो वैकल्पिक कुंजी को सीधे एक्सेस करने पर एक वास्तविक त्रुटि बनाती है। उत्पन्न इंटरफेस को फ़ेच सीमा पर `unknown` के साथ जोड़ें और उपयोग से पहले संकीर्ण करें: `JSON.parse` रिटर्न `any` है, इसलिए जेनरेट किए गए इंटरफ़ेस पर कास्ट वह बिंदु होना चाहिए जहां आपने सत्यापन किया है, न कि जहां आप उम्मीद करते हैं।
उन पेलोड से उत्पन्न करें जिन्हें आप अपलोड नहीं करेंगे
API प्रतिक्रियाएं सबसे संवेदनशील होती हैं JSON अधिकांश डेवलपर्स संभालते हैं - खाता डेटा, ऑर्डर, टोकन। ब्राउज़र में JSON से TypeScript रूपांतरण चलाने का मतलब है कि पेलोड को स्थानीय रूप से पार्स किया जाता है और कभी प्रसारित नहीं किया जाता है, इसलिए आप इसे पहले संशोधित किए बिना वास्तविक प्रतिक्रिया पेस्ट कर सकते हैं, और टूल ऑफ़लाइन काम करता रहता है।
JSON से TypeScript - अक्सर पूछे जाने वाले प्रश्न
मैं जेनरेट किए गए फ़ील्ड को वैकल्पिक कैसे बनाऊं?
दूसरा नमूना शामिल करें जहां वह कुंजी अनुपस्थित है और पुन: उत्पन्न करें - कनवर्टर तब `key?: type` उत्सर्जित करता है। अनुमान केवल तभी एक फ़ील्ड को वैकल्पिक के रूप में चिह्नित करता है जब उसके पास अनुपस्थिति का सबूत होता है, यही कारण है कि अनुबंध के लिए एक नमूना कभी भी पर्याप्त नहीं होता है।
क्या मुझे उत्पन्न JSON प्रकारों के लिए इंटरफ़ेस या प्रकार का उपयोग करना चाहिए?
दोनों वस्तु आकृतियों के लिए काम करते हैं; इंटरफ़ेस API मॉडल के लिए पारंपरिक हैं क्योंकि उन्हें बढ़ाया जा सकता है और स्पष्ट त्रुटि संदेश उत्पन्न कर सकते हैं। महत्वपूर्ण विकल्प `strict` मोड है, न कि यह कि आप कौन सा कीवर्ड चुनते हैं।
क्या मैं सर्वर पर डेटा भेजे बिना JSON को TypeScript में बदल सकता हूँ?
हाँ। इस साइट पर कनवर्टर पृष्ठ में ही इंटरफ़ेस उत्पन्न करता है, इसलिए प्रतिक्रिया आपके ब्राउज़र को कभी नहीं छोड़ती है और नेटवर्क अक्षम होने पर रूपांतरण काम करना जारी रखता है।
इस पोस्ट में उल्लिखित उपकरण
पढ़ने के लिए और लेख
5 मिनट पढ़ें
JSON जाने के लिए: ऐसी संरचनाएं जो पहले प्रयास में अनमर्शल हो
सही फ़ील्ड नाम और json टैग के साथ JSON को गो स्ट्रक्चर में कनवर्ट करें, नेस्टेड प्रकार शामिल हैं - साथ ही देखने के लिए संख्यात्मक, शून्य और समय जाल।
6 मिनट पढ़ें
JSON से JSON स्कीमा: नमूना पेलोड से अनुबंध तक
ब्राउज़र में JSON को JSON स्कीमा में कनवर्ट करें: वास्तविक पेलोड से एक ड्राफ्ट का अनुमान लगाएं, फिर आवश्यक फ़ील्ड, प्रारूप और एनम को सख्त करें - साथ ही अनुमान की सीमाएं भी।
5 मिनट पढ़ें
JSON से SQL: पेलोड से तालिका तक आप क्वेरी कर सकते हैं
समझदार प्रकार की मैपिंग, एस्केपिंग और ईमानदार सीमाओं के साथ वास्तविक पेलोड से उत्पन्न क्रिएट टेबल और इंसर्ट स्टेटमेंट के साथ JSON को SQL में कनवर्ट करें।
- पढ़ने के लिए लंबा लेख: JSON से TypeScript: सत्य बताने वाले प्रकार