ממיר JSON ל-TypeScript
הדביקו תגובת API וקבלו interfaces או type aliases של TypeScript מוכנים לשימוש, כולל טיפוסים מקוננים, שדות אופציונליים ואיחודים עם null שמוסקים בשבילכם.
רץ בדפדפן שלכםבלי הרשמהשום דבר לא מועלה
איך משתמשים בכלי JSON ל-TypeScript
- הדביקו דוגמת JSON, כמו תגובת API, בתיבת הקלט, או פתחו קובץ
.json. - הגדירו את שם טיפוס השורש (למשל
UserאוApiResponse). - בחרו הצהרות
interfaceאוtypeוהפעילו או כבוexport, readonlyאו שדות שכולם אופציונליים. - בחרו
unknown(בטוח יותר) אוanyעבור ערכים שהדוגמה לא יכולה לחשוף, כמו מערכים ריקים ו-null. - העתיקו את הקוד שנוצר או הורידו אותו כקובץ
.ts.
איך הטיפוסים מוסקים
- טיפוסים פרימיטיביים: מחרוזות, מספרים וערכים בוליאניים ממופים ל-
string,numberו-boolean. - אובייקטים מקוננים הופכים ל-interfaces נפרדים עם שם ב-PascalCase, כך ש-
billing_addressהופך ל-BillingAddress. - מערכים של אובייקטים ממוזגים לטיפוס פריט אחד, בשם ביחיד:
usersנותןUser[]. מפתח שחסר בחלק מהפריטים הופך לאופציונלי (key?:). - ערכי null משתלבים עם שאר הערכים שנראו עבור אותו מפתח:
string | null. מפתח שתמידnullמקבל את ברירת המחדלunknownאוany. - מערכים מעורבים הופכים למערכי איחוד כמו
(number | string)[]. - מבנים זהים מוצהרים פעם אחת ומשמשים שוב, ומבנים שונים שהיו מקבלים אותו שם מקבלים סיומת מספרית.
- מפתחות שאינם מזהים תקינים, כמו
"first-name"או"2fa", מוקפים במירכאות.
interface לעומת type
עבור מבני אובייקטים פשוטים השניים כמעט ניתנים להחלפה. הצהרות interface אפשר להרחיב ולמזג, והן נותנות שגיאות קומפיילר קצת ברורות יותר. type aliases יכולים לבטא גם איחודים ו-mapped types. צוותים רבים משתמשים ב-interfaces למודלים של API וב-types לכל השאר; בחרו את מה שבסיס הקוד או ה-linter שלכם (@typescript-eslint/consistent-type-definitions) מצפים לו.
קבלו טיפוסים טובים יותר מהדוגמה
הטיפוסים יכולים להיות שלמים רק כמו הדוגמה. הדביקו תגובה שכוללת שדות אופציונליים, או מערך עם כמה פריטים מגוונים, כדי שהמחולל יוכל לזהות מפתחות אופציונליים ו-nullable. ערכים כמו תאריכים ו-enums מגיעים ב-JSON כמחרוזות רגילות; צמצמו אותם ידנית אחר כך, למשל status: 'active' | 'disabled'. לאימות בזמן ריצה, שלבו את הטיפוסים שנוצרו עם ספריית סכמות כמו Zod.
שאלות נפוצות
האם ה-JSON שלי מועלה?
איך מזוהים מאפיינים אופציונליים?
?. כשיש אובייקט יחיד כל מפתח הוא חובה, אלא אם מסמנים הכול אופציונלי.האם להשתמש ב-<code>unknown</code> או ב-<code>any</code>?
unknown בטוח יותר: TypeScript מחייב אתכם לצמצם את הערך לפני השימוש בו. any מבטל את בדיקת הטיפוסים עבור אותו ערך. השתמשו בו רק אם אתם מתכננים לחדד את הטיפוסים בהמשך.למה תאריך ISO מקבל טיפוס <code>string</code>?
new Date() אחרי הניתוח, שנו את המאפיין ל-Date במודל שלכם.