typeКлючевое слово type в JSON Schema определяет тип данных,
которому должно соответствовать проверяемое значение. В библиотеке Ajv
это одно из базовых и наиболее часто используемых ограничений, так как
именно оно формирует первичный уровень валидации структуры данных.
Поддерживаемые типы соответствуют спецификации JSON:
string — строкаnumber — число (включая дробные значения)integer — целое числоboolean — логическое значениеobject — объектarray — массивnull — пустое значениеПростейшее применение выглядит следующим образом:
{
"type": "string"
}
Такое правило означает, что валидным считается только строковое значение, любое другое будет отклонено валидатором.
При использовании Ajv схема передаётся в компилятор, который
превращает её в оптимизированную функцию проверки. Ключевое слово
type в этом процессе становится одним из первых
фильтров.
Пример:
import Ajv from "ajv";
const ajv = new Ajv();
const schema = {
type: "number"
};
const validate = ajv.compile(schema);
validate(42); // true
validate("42"); // false
Проверка выполняется строго: строка "42" не считается
числом, даже если может быть приведена к нему.
Ajv по умолчанию следует строгой интерпретации типов JSON Schema. Это означает отсутствие неявного преобразования данных.
Пример различий:
validate(1); // true
validate("1"); // false
Однако библиотека поддерживает режимы, влияющие на обработку типов:
coerceTypesstrictTypesremoveAdditionalcoerceTypes)При включении параметра возможно автоматическое преобразование:
const ajv = new Ajv({ coerceTypes: true });
const schema = { type: "number" };
const validate = ajv.compile(schema);
validate("123"); // true (строка преобразована в число)
Внутренне строка "123" преобразуется в число
123 перед проверкой.
JSON Schema допускает указание нескольких типов одновременно:
{
"type": ["string", "null"]
}
Такое определение означает допустимость либо строки, либо
null.
В Ajv это используется для моделей, где значение может отсутствовать:
const schema = {
type: ["object", "null"]
};
Это распространённый подход при работе с API-ответами, где поле может быть опциональным.
type с другими ключевыми словамиКлючевое слово type редко используется изолированно.
Обычно оно комбинируется с другими ограничениями:
string + ограничения
длины{
"type": "string",
"minLength": 3,
"maxLength": 10
}
number + диапазон
значений{
"type": "number",
"minimum": 0,
"maximum": 100
}
object + свойства{
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" }
},
"required": ["id"]
}
Здесь type: "object" задаёт базовую структуру, а
остальные ключи уточняют её содержимое.
object и arrayДля object проверка включает:
validate({}); // true
validate([]); // false
validate(null); // false
Для array Ajv проверяет:
{
"type": "array",
"items": { "type": "number" }
}
При несоответствии type валидация завершается с ошибкой
без дальнейшей проверки вложенных правил.
Пример:
{
"type": "string",
"minLength": 5
}
Если передано число:
42
то правило minLength не проверяется, так как тип уже не
соответствует.
null как
типомТип null в JSON Schema имеет особую роль. Он обозначает
исключительно значение null:
{
"type": "null"
}
Использование:
Часто комбинируется:
{
"type": ["string", "null"]
}
typeВ строгом режиме Ajv усиливает контроль над корректностью схемы:
typeПример некорректной схемы:
{
"type": "strng"
}
В строгом режиме такая схема будет считаться ошибочной.
typeКлючевое слово type является одной из самых быстрых
проверок в Ajv, поскольку:
typeofПример внутренней логики:
typeof data === "string"
или
Array.isArray(data)
В больших схемах type часто используется на каждом
уровне вложенности:
{
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"id": { "type": "integer" },
"profile": {
"type": "object",
"properties": {
"age": { "type": "integer" }
}
}
}
}
}
}
Такая структура позволяет формировать строгие контракты данных, особенно в API и микросервисной архитектуре.
type с anyOf, oneOf,
allOfКлючевое слово может использоваться внутри логических конструкций:
{
"oneOf": [
{ "type": "string" },
{ "type": "number" }
]
}
Здесь type определяет альтернативные допустимые формы
данных.
type в системе валидацииКлючевое слово type выполняет фундаментальную функцию
первичной фильтрации данных. В Ajv оно является базовой точкой входа для
дальнейшей проверки схемы, определяя допустимую природу значения и влияя
на всю последующую логику валидации.