UTILS.
‎100%‎ داخل المتصفح
📘

من JSON Schema إلى TypeScript

صرّف مخطط JSON Schema (draft-07 أو 2020-12) إلى واجهات TypeScript وأسماء أنواع مستعارة، مع معالجة required والتعدادات و$ref والمصفوفات والمُركِّبات.

المخرج

حول هذه الأداة

تصرّف أداة من JSON Schema إلى TypeScript مستند JSON Schema إلى واجهات TypeScript وأسماء أنواع مستعارة، فتفعل ما تفعله مكتبة json-schema-to-typescript الشائعة دون تثبيت سلسلة أدوات. بخلاف محوّلات عيّنة JSON، تقرأ هذه الأداة مخططًا فعليًا: تتنقّل عبر كائن المخطط وتحوّل type:'object' إلى واجهة حيث تكون المفاتيح المدرجة في required غير اختيارية والبقية تُعلَّم بـ ?.

يُحلَّل ويُولَّد كل شيء محليًا في متصفحك باستخدام JSON.parse وجافاسكريبت عادية، لذا لا يغادر مخططك الصفحة أبدًا. مخططات السلاسل مع enum تصبح اتحاد سلاسل نصّية حرفية؛ وstring وnumber/integer وboolean وnull العادية تُطابَق بمكافئاتها في TypeScript؛ والمصفوفات تصبح T[] (صف عندما تكون items مصفوفة). المُركِّبات مدعومة — allOf تصبح تقاطعًا (A & B) وanyOf / oneOf تصبح اتحادات (A | B) — والنوع القابل لأن يكون null بصيغة type:[T,'null'] يصبح T | null.

تُحَلّ المراجع بالاسم: $ref المشير إلى #/definitions/X أو #/$defs/X يُصدِر مرجع نوع مسمّى، ويُولَّد كل تعريف كواجهة export interface أو export type خاصة به. additionalProperties تضيف توقيع فهرس [key: string]: T. يعود اسم نوع الجذر إلى title أو $id الخاص بالمخطط. بدّل بين مُخرَج interface وtype وما إذا كانت سلاسل description في المخطط تصبح تعليقات JSDoc /** */. انسخ النتيجة أو نزّل ملف .ts.

الأسئلة الشائعة

أي ميزات JSON Schema مدعومة؟
object مع properties وrequired، وتعدادات string كاتحادات حرفية، وnumber/integer/boolean/null، والمصفوفات (بما فيها الصفوف)، ومُركِّبات allOf/anyOf/oneOf، و$ref إلى definitions أو $defs، وadditionalProperties كتوقيع فهرس، ومصفوفات النوع القابل لأن يكون null مثل ["string","null"].
كيف تُعالَج $ref وdefinitions؟
$ref مثل #/definitions/Address (أو #/$defs/Address) يصبح مرجعًا لنوع مسمّى Address، ويُصدَر كل مدخل تحت definitions أو $defs كواجهة export interface أو export type خاصة به، فتُحَلّ المراجع داخل المُخرَج.
ما الذي يسمّي نوع الجذر؟
مربع اسم الجذر إذا ضبطته، وإلا title الخاص بالمخطط، وإلا المقطع الأخير من $id، وإلا Root. أسماء التعريفات تأتي من مفاتيحها في definitions أو $defs، مُحوَّلة إلى PascalCase.
هل يمكنني الإبقاء على أوصاف المخطط؟
نعم. مع تفعيل JSDoc (الافتراضي)، تُصدَر أي سلسلة description في المخطط أو خاصية كتعليق /** ... */ فوق النوع أو الحقل المقابل، مع الحفاظ على التوثيق في TypeScript المولَّد.

المزيد من الأدوات