मार्गदर्शक लेख · 6 मिनट पढ़ा
JSON से ऐसे TypeScript प्रकार उत्पन्न करें जो सत्य बताते हों
JSON से TypeScript चरण आम तौर पर एक संपादक में API प्रतिक्रिया की प्रतिलिपि बनाने और एक इंटरफ़ेस को हाथ से लिखने से शुरू होता है - एक छोटा कार्य जो एक बड़े जोखिम को छुपाता है: आपके द्वारा लिखे गए प्रकार आपके द्वारा देखी गई एक प्रतिक्रिया का वर्णन करते हैं, न कि उन प्रतिक्रियाओं का जो आपके उपयोगकर्ता ट्रिगर करेंगे।
अद्यतन
JSON से TypeScript: एक प्रतिनिधि पेलोड से शुरू करें, भाग्यशाली नहीं
एक जनरेटर केवल वही अनुमान लगा सकता है जो आपका नमूना दिखाता है। एक प्रतिक्रिया प्राप्त करें जिसमें अजीब मामले शामिल हों: एक रिकॉर्ड जिसमें वैकल्पिक फ़ील्ड मौजूद है और एक बिना, एक शून्य, एक खाली सरणी, एक दशमलव। एक अच्छा नमूना पाँच साफ़ नमूनों को मात देता है।
वैकल्पिक फ़ील्ड सरणियों से आते हैं
एक वस्तु को देखते हुए, प्रत्येक कुंजी आवश्यक लगती है। वस्तुओं की एक श्रृंखला को देखते हुए, एक जनरेटर वस्तुओं की तुलना कर सकता है: कुछ वस्तुओं में गायब कुंजी वैकल्पिक है (कुंजी?: स्ट्रिंग), और हर जगह मौजूद एक कुंजी की आवश्यकता होती है। यही कारण है कि रिकॉर्ड्स की सूची चिपकाने से एक रिकॉर्ड चिपकाने की तुलना में नाटकीय रूप से बेहतर प्रकार उत्पन्न होते हैं।
मॉडल ईमानदारी से शून्य हो जाता है
// One sample with "deleted_at": null and one with a date
interface User {
id: number;
deleted_at: string | null; // not string, not optional
}
शून्य और अपरिभाषित अलग चीजें हैं। एक निरर्थक फ़ील्ड शून्य मान के साथ मौजूद है; एक वैकल्पिक फ़ील्ड पूरी तरह से अनुपस्थित हो सकता है। जेनरेटर जो दो को ध्वस्त करते हैं, ऐसे इंटरफेस उत्पन्न करते हैं जो गलत होते हुए भी टाइप-चेक करते हैं - गलत का सबसे महंगा प्रकार, क्योंकि कंपाइलर आपको चेतावनी देना बंद कर देता है।
यूनियनों ने किसी को भी हराया
जब एक फ़ील्ड एक रिकॉर्ड में एक स्ट्रिंग और दूसरे में एक संख्या होती है - गड़बड़ एपीआई मौजूद होती है - ईमानदार प्रकार स्ट्रिंग है | संख्या। किसी भी या अज्ञात पर वापस जाने से संकलक चुप हो जाता है और उत्पादन में विफलता को धकेल देता है। एक जनरेटर जो यूनियन की रिपोर्ट करता है, कम से कम वास्तविकता का दस्तावेज़ीकरण करता है, और फिर आप API टीम से पूछ सकते हैं कि क्यों।
प्रकार संकलन-समय हैं; रनटाइम पर मान्य करें
- TypeScript रनटाइम पर गायब हो जाता है। किसी विकृत पेलोड को उस आकार के साथ आने से कोई नहीं रोकता है जिसे आपका इंटरफ़ेस प्रतिबंधित करता है।
- आप जो अपेक्षा करते हैं उसका वर्णन करने के लिए जेनरेट किए गए प्रकारों का उपयोग करें, और उस सीमा पर एक रनटाइम सत्यापनकर्ता (ज़ोड, वैलिबोट, या एजेवी के साथ JSON स्कीमा) का उपयोग करें जहां डेटा आपके ऐप में प्रवेश करता है।
- एक ही नमूने से JSON स्कीमा उत्पन्न करने से आपको रनटाइम आधा मिलता है - स्कीमा मान्य होती है, इंटरफ़ेस दस्तावेज़।
प्रकारों को पुनर्जीवित रखें, दोबारा टाइप नहीं किया गया
हाथ से लिखे गए प्रकार API से बहते हैं। जेनरेटर को अपने वर्कफ़्लो में एक चरण के रूप में मानें: एक ताज़ा प्रतिक्रिया पेस्ट करें, पुन: उत्पन्न करें, अपनी प्रकार की फ़ाइल में पेस्ट करें, और कंपाइलर को आपको हर उस स्थान को दिखाने दें जहाँ API बदला गया है। यह सबसे सस्ता API-बहाव डिटेक्टर है - और इसकी लागत तीस सेकंड है।
इसे JSON से TypeScript जेनरेटर के साथ आज़माएं - इंटरफ़ेस या प्रकार आउटपुट, वैकल्पिक कुंजियों का पता लगाया गया, यूनियन संरक्षित।