تحويل JSON إلى تعريفات TypeScript — Numio
يُنشئ واجهات TypeScript أو أسماء أنواع مستعارة (type aliases) من عيّنة JSON، مثل استجابة API. يتعامل مع التداخل وnull والمصفوفات المختلطة، ويجري التحويل في متصفحك.
إنشاء أنواع TypeScript مسمّاة لاستجابة API.
Converted in your browser. Null stays a value type; ? marks a field missing from some objects in an array. Empty arrays use unknown elements.
JSON
TypeScript
متى تستخدمها
- إنشاء أنواع TypeScript مسمّاة لاستجابة API.
- مقارنة عدة كائنات في مصفوفة لرؤية الأنواع المختلفة والحقول الاختيارية.
طريقة الاستخدام
- الصق JSON حقيقيًا أو حمّل أحد الأمثلة. تحميل مثال يستبدل إدخالك.
- حدّد اسم النوع الجذري واختر interface (تصبح الكائنات المتداخلة أنواعًا مستقلة) أو type (اسم نوع مستعار واحد مع الكائنات المتداخلة مضمّنة).
- تحقق من null والحقول الاختيارية (?) واتحادات string/number، ثم انسخ الأنواع.
إدخال JSON
[{"id":1,"name":"Tokyo"},{"id":2}]ناتج TypeScript (Root، interface)
export type Root = RootValueItem[];
export interface RootValueItem {
id: number;
name?: string;
}التفاصيل والقيود
يُفحص كل عنصر في المصفوفة. في المثال، name مفقود من الكائن الثاني فيصبح اختياريًا؛ أما الحقل الموجود بقيمة null فيصبح بدلًا من ذلك اتحادًا مع null.
تعطي المصفوفة الفارغة unknown[]. وتصبح المصفوفات المختلطة مصفوفات من نوع اتحاد، لا tuples ثابتة الطول.
لا تغطي الأنواع إلا ما يظهر في العيّنة. لا تُستنتج الحقول التي لا تظهر أبدًا، ولا صيغ التاريخ أو البريد الإلكتروني، ولا نطاقات القيم، ولا العلاقات بين الحقول.
يجب أن يكون الإدخال JSON قياسيًا؛ أزل التعليقات أو الفواصل الزائدة في النهاية بمنسّق JSON أولًا. أدخل المعرّفات ذات الأصفار البادئة كسلاسل نصية.
الإدخال محدود بـ 1,000,000 حرف، ونحو 64 مستوى، و50,000 قيمة. أنواع TypeScript لا تتحقق من البيانات وقت التشغيل.
FAQ
هل أُنشئ interface أم type؟
كلاهما يصف الشكل نفسه. ينشئ interface واجهة مسمّاة لكل كائن متداخل، وهذا يسهّل إعادة استخدامها؛ وينشئ type اسم نوع مستعارًا واحدًا تُكتب فيه الكائنات المتداخلة مضمّنة.
هل يمكنه إنشاء صنف (class) في TypeScript؟
لا، يُنشئ واجهات أو أسماء أنواع مستعارة فقط. إذا كنت تحتاج تحققًا وقت التشغيل، فاستخدم JSON to Zod وعدّل المخطط وفق قواعدك.
ما الفرق بين null والحقل الاختياري؟
في {"name":null} يوجد name قيمته null؛ أما {} فليس فيه name إطلاقًا. تبقى null في النوع، ولا تُضاف ? إلا عندما تفتقد بعض كائنات المصفوفة نفسها هذا الحقل.
ماذا تُنتج مصفوفة JSON في المستوى الجذري؟
اسم نوع مستعارًا للمصفوفة إضافةً إلى interface لعناصرها، كما في المثال أعلاه حيث Root هو RootValueItem[].