jsonschema - چگونه با استفاده از تایپاسکریپت اسکیمای JSON با نوع بازگشتی String| undefined را اعتبارسنجی کنیم


دو نسخه از پاسخ JSON من عبارتند از:

{
  firstName: "abc",
  LastName: "xyz",
  Address: "abc123"
}

و

{
  firstName: undefined,
  LastName: undefined,
  Address: undefined
}

حتی با وجود اینکه JSON Schema را به این صورت تعریف کرد:

var ResponseSchema = {
  "firstName": {
    "type": [String,undefined],
  },
  "LastName": {
    "type": [String,undefined],
  },
  "Address": {
    "type": [String,undefined],
  },
  "required": [
    "firstName",
    "LastName",
    "Address",
  ],
}

شیء پاسخ:

{
  firstName: undefined,
  LastName: undefined,
  Address: undefined
}

دریافت خطا به صورت:

نیاز به ویژگی «firstName» دارد
نیاز به ویژگی «LastName» دارد
نیاز به ویژگی «Address» دارد

استفاده از بسته Node «jsonschema».

پاسخ شماره ۱

اول: از نامهای نوع مناسب در طرحواره خود استفاده کنید (رشتهها)

شما میخواهید یک اسکیمای JSON بنویسید. طبق تعریف، type شما میتواند یا یک رشته باشد یا یک آرایه از رشتهها. کاری که انجام میدهید این است که یک تعریف نوع TypeScript را وارد میکنید، نه یک رشته.

تلاش کن

  "firstName": {
    "type": ["string", "null"],
  },
  "LastName": {
    "type": ["string", "null"],
  },
  "Address": {
    "type": ["string","null"],
  },
  "required": [
    "firstName",
    "LastName",
    "Address",
  ]

دوم: undefined نوع معتبری برای یک طرحبندی JSON نیست

داشتن یک ویژگی که روی undefined تنظیم شده است، به شمار میرود که آن ویژگی تنظیم نشده است. من پیشنهاد میکنم در مواردی مثل این به null منتقل شوید.

پاسخ شماره ۲

من jsonschema را نمیدانم، اما تعریف شما و فیلدهای الزامی شما برای من نوعی خطای مفهومی به نظر میرسد.

تو تعریف میکنی

"required": [
  "firstName", 
  "LastName", 
  "Address"
]

اما نوع هر فیلد را روی String,undefined تنظیم کنید. اگر اکنون آنها را روی undefined تنظیم کنید، این نیاز برآورده نمیشود.

به عبارت دیگر: jsonschema به نظر میرسد که کار میکند، زیرا آن خطا را برای پاسخ شما ایجاد میکند:

{
  "firstname": undefined,
  "Lastname": undefined,
  "Address": undefined,
}