انتقل إلى المحتوى

تحويل JSON إلى أنواع Sarcastic — Numio

يُنشئ متحققات لمكتبة فحص الأنواع وقت التشغيل sarcastic من عيّنة JSON. تصبح الكائنات is.shape({...})، والمصفوفات is.arrayOf(...)، وتُغلَّف المفاتيح المفقودة من بعض عناصر المصفوفة بـ is.maybe(...).

فحص شكل الـ JSON المجلوب وقت التشغيل في مشروع JavaScript صغير دون مكتبة مخططات.

JSON

Sarcastic

متى تستخدمها

  • فحص شكل الـ JSON المجلوب وقت التشغيل في مشروع JavaScript صغير دون مكتبة مخططات.
  • حماية حمولات الإعدادات أو الرسائل بعمليات تحقق ترمي خطأً عند ورود بيانات غير متوقعة.

طريقة الاستخدام

  1. الصق كائن JSON؛ ولتعليم حقول كاختيارية، أدرج عناصر مصفوفة تحتويها وأخرى لا تحتويها.
  2. اقرأ الناتج: اسم الشكل الجذري RootInterface، وتُسمّى الأشكال المتداخلة بحسب مفاتيحها (يصبح posts هو Posts).
  3. انسخ الشيفرة وتحقق من البيانات بـ is(data, RootInterface)، الذي يعيد القيمة أو يرمي خطأً عند عدم التطابق.

إدخال JSON

{
  "id": 1,
  "name": "Ada",
  "nickname": null,
  "tags": ["math"],
  "posts": [
    { "title": "Notes", "draft": true },
    { "title": "Engine" }
  ]
}

متحققات Sarcastic

import is from "sarcastic"

const anyValue = (value) => value

const Posts = is.shape({
  title: is.string,
  draft: is.maybe(is.boolean),
})

const RootInterface = is.shape({
  id: is.number,
  name: is.string,
  nickname: is.maybe(anyValue),
  tags: is.arrayOf(is.string),
  posts: is.arrayOf(Posts),
})

التفاصيل والقيود

يُنشأ في المتصفح بمولّد الموقع الخاص، مع إضافة import is from "sarcastic" وتطبيق تنسيق Prettier؛ بلا أي طلب إلى الخادم.

ليس في sarcastic تحقق من نوع "any"، لذا تصبح القيمة التي هي null فقط is.maybe(anyValue)، باستخدام دالة مساعدة صغيرة const anyValue = (value) => value تُضاف إلى الناتج.

الأعداد الصحيحة والعشرية كلاهما is.number. تصبح المصفوفات الفارغة is.array؛ وتستخدم المصفوفات المختلطة is.either، مثل is.arrayOf(is.either(is.number, is.string)).

تُعرَّف الأشكال قبل الأشكال التي تستخدمها، فتعمل الشيفرة كما هي عند لصقها.

FAQ

كيف تُمثَّل الحقول الاختيارية؟

المفاتيح المفقودة من بعض كائنات المصفوفة نفسها، أو التي قيمتها null في بعضها، تُغلَّف بـ is.maybe(...)، الذي يقبل null وundefined. مفاتيح المستوى الأعلى في الكائن المفرد إلزامية دائمًا.

ماذا يحدث للمصفوفة الجذرية؟

تُدمج العناصر في شكل واحد هو RootInterface يصف عنصرًا مفردًا، ويُضاف const RootInterfaceList = is.arrayOf(RootInterface) للمصفوفة كاملة.

هل sarcastic هي نفسها io-ts أو Zod؟

لا. sarcastic مكتبة أصغر بلا استنتاج ثابت للأنواع. إذا كنت تحتاج أنواع TypeScript أيضًا، فصفحتا JSON to Zod أو JSON to io-ts أقرب إلى ذلك.

المواصفات والمراجع