איך להשתמש בו
- הדביקו JSON בתיבת הקלט, פתחו קובץ .json או נסו את הדוגמה.
- קבעו את שם הטיפוס הראשי, למשל Order או ApiResponse.
- בחרו הצהרות interface או type, והאם להוסיף export ו־readonly.
- העתיקו את ה־TypeScript שנוצר או הורידו אותו כקובץ types.ts.
איך זה עובד
המחולל סורק את כל מסמך ה-JSON ומתעד את סוגי הערכים שנמצאו בכל מקום. כל אובייקט JSON הופך להצהרה עם שם משלו. השם נוצר ממפתח המאפיין בכתיב PascalCase, כך ש-“shipping_address” הופך ל-ShippingAddress. פריטים במערך נקראים לפי צורת היחיד של המפתח: “items” נותן Item, “categories” נותן Category, ומפתחות שלא נראים כמו רבים מקבלים סיומת “Item”.
כל האובייקטים בתוך מערך אחד ממוזגים ל-interface אחד. אם מפתח מופיע רק בחלקם, הוא מסומן כאופציונלי עם “?”. אם לערך יש סוגים שונים במקומות שונים, הטיפוס הוא union כמו string | number. null נשמר כטיפוס משלו, כך ששדה שלפעמים null הופך ל-string | null. מערך ריק הופך ל-unknown[], כי אין ממה להסיק. שני אובייקטים עם אותם מאפיינים וטיפוסים בדיוק חולקים interface אחד במקום ליצור כפילויות. מפתחות שאינם מזהים חוקיים, כמו “first-name”, נכתבים במירכאות.
התוצאה מתארת רק את הדוגמה שהדבקת. שדה שבמציאות אופציונלי או יכול להיות null יסומן כשדה חובה ולא null אם הדוגמה לא מציגה זאת, ותאריכים מגיעים כמחרוזות רגילות. בדקו את הטיפוסים מול תיעוד ה-API לפני שמסתמכים עליהם.
דוגמאות
הגדרת טיפוסים לתגובת API
הדביקו הזמנה מה-API של החנות עם שם השורש Order. תקבלו interface עבור Order, Customer, Item ו-Shipping, עם note?: string על Item כי רק לאחד משני הפריטים יש note.
קונפיגורציה לקריאה בלבד
הדביקו config.json, סמנו “הפכו מאפיינים לקריאה בלבד” והדביקו את התוצאה ב-config.d.ts, כך שכתיבה בשוגג לקונפיג תיתפס על ידי המהדר.
מערך ברמה העליונה
נקודת קצה של רשימה מחזירה [{…}, {…}]. עם שם השורש Product, הפלט מתחיל ב-“export type Product = ProductItem[];” ואחריו ה-interface של ProductItem.
שאלות נפוצות
למה שדה מופיע כאופציונלי בפלט?
כי לפחות אובייקט אחד באותו מערך אינו מכיל את המפתח הזה. אם לכל האובייקטים יש אותו, הוא יוגדר כשדה חובה. הדביקו כמה רשומות כדי לקבל שדות אופציונליים מדויקים יותר.
למה תאריך מוגדר כ-string?
ל־JSON אין טיפוס תאריך, ולכן תאריכים עוברים כמחרוזות. המחולל אינו מנחש פורמטים. שנו את הטיפוס בעצמכם אם הקוד שלכם ממיר אותם לאובייקטי Date.
מה ההבדל בין interface לבין type?
עבור מבני אובייקטים הם עובדים כמעט אותו דבר. ניתן להרחיב ולמזג interfaces באמצעות הצהרות מאוחרות יותר; לא ניתן לפתוח מחדש type aliases. בחרו את הסגנון שכבר נמצא בשימוש בקוד שלכם.
האם הכלי יכול לייצר אימות בזמן ריצה, כמו סכמות Zod?
לא. הכלי מייצר הצהרות TypeScript בלבד, שנבדקות בזמן קומפילציה ואינן מאמתות נתונים בזמן ריצה.
פרטיות
ה־JSON שלכם מנותח רק בדפדפן שלכם. שום דבר לא מועלה, לא נשמר ולא נכלל בנתוני ניתוח.