Преобразование JSON в типы Sarcastic — Numio
Генерирует валидаторы для библиотеки runtime-проверки типов sarcastic по примеру JSON. Объекты становятся is.shape({...}), массивы — is.arrayOf(...), а ключи, отсутствующие в некоторых элементах массива, оборачиваются в is.maybe(...).
Проверять форму полученного JSON во время выполнения в небольшом JavaScript-проекте без библиотеки схем.
JSON
Sarcastic
Когда пригодится
- Проверять форму полученного JSON во время выполнения в небольшом JavaScript-проекте без библиотеки схем.
- Защитить payload конфигурации или сообщений проверками, которые бросают исключение на неожиданных данных.
Как пользоваться
- Вставьте JSON-объект; чтобы пометить поля как необязательные, добавьте элементы массива с ними и без них.
- Изучите результат: корневая форма называется RootInterface, вложенные формы получают имена по ключам (posts становится Posts).
- Скопируйте код и проверяйте данные через 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.