JSON रिस्पॉन्स के लिए TypeScript टाइप्स हाथ से लिखना दोहराव वाला है और पहले प्रयास में सूक्ष्म रूप से गलत होना आसान है, खासकर जब फ़ील्ड वैकल्पिक हो या मान तीन स्तर गहरा नेस्टेड हो।
JSON to TypeScript जेनरेटर का उपयोग करना
एक डॉक्यूमेंट पेस्ट करें, या एरे में कई रिकॉर्ड्स, रूट टाइप का नाम दें, इंटरफेसेस या type aliases चुनें, और Generate types दबाएं। टाइप इन्फ़रेंस इस साइट पर स्कीमा जेनरेटर के साथ शेयर की गई है, इसलिए दोनों पेज इस बात पर सहमत हैं कि आपका डॉक्यूमेंट वास्तव में क्या है और सिर्फ इसमें भिन्न हैं कि उत्तर को कैसे लिखते हैं।
दिया
[
{"user": {"name": "a"}, "tags": [], "meta": {}},
{"user": {"name": "b"}, "tags": ["x"], "meta": {}, "extra": true}
]
आउटपुट है:
export interface RootItem {
user: User
tags: string[]
meta: Record<string, unknown>
extra?: boolean
}
export interface User {
name: string
}
export type Root = RootItem[]
नेस्टेड ऑब्जेक्ट्स को उनका अपना नामित टाइप क्यों मिलता है
तीन स्तर गहरा एक इनलाइन टाइप अपठनीय है, और फ़ाइल में कुछ भी इसका
संदर्भ नहीं दे सकता। नाम ऑब्जेक्ट रखने वाली कुंजी से आते हैं,
एरे के अंदर सिंगुलराइज़ किए जाते हैं (Root से RootItem), और
एक दोहराया नाम एक नंबर जुड़ जाता है ताकि आउटपुट हमेशा बिना
टकराव के कंपाइल हो।
वैकल्पिक मार्क वास्तव में क्या वादा करता है
extra?: boolean का मतलब है कि कुंजी आपके सैंपल में कम से कम एक
रिकॉर्ड में गायब थी, ठीक वही नियम जो स्कीमा जेनरेटर required
के लिए उपयोग करता है। इसका मतलब यह नहीं है कि फ़ील्ड आपकी पूरी
API में वैकल्पिक गारंटी है, बस आपका सैंपल यह साबित नहीं कर सकता
कि यह हमेशा मौजूद है। मार्क को अपने डेटा से सबूत के रूप में पढ़ें,
स्रोत सिस्टम से गारंटी के रूप में नहीं।
खाली मान
एक खाली ऑब्जेक्ट खाली इंटरफेस के बजाय Record<string, unknown> बन
जाता है, क्योंकि खाली इंटरफेस कुछ भी स्वीकार करता है और आकार के
बारे में कुछ उपयोगी नहीं बताता। एक खाली एरे unknown[] बन जाता है,
क्योंकि उसके अंदर एलीमेंट टाइप इन्फ़र करने के लिए कुछ नहीं है,
और एक का आविष्कार करना तथ्य के रूप में प्रस्तुत एक अनुमान होता।
क्यों हर नंबर सिर्फ number है
TypeScript का अलग इंटेजर टाइप नहीं है, इसलिए फ़ील्ड जो आपके सैंपल
में हमेशा एक पूर्णांक है वह अभी भी number टाइप का है, वैसे ही
जैसे एक जिसमें दशमलव हो। यह दर्शाता है कि TypeScript खुद नंबर्स
को कैसे मॉडल करता है, इसलिए जेनरेटेड टाइप्स कंपाइल और बिल्कुल
हैंड-रिटन टाइप्स की तरह व्यवहार करते हैं।