Совсем недавно я потратил некоторое время на создание валидатора схемы объекта, это был прямой результат работы с MongoDB и mongoose. Я думал о том, как работает валидатор Schema в мангусте и что еще лучше, чем изобретать велосипед? Если вы работали с mongoose и MongoDB, вы поймете, о чем я говорю. Это не заменяет реальную сделку, однако я предпринял это испытание, чтобы лучше понять, как работает валидатор схемы под капотом, и углубить наши навыки решения проблем.

Когда мы работаем с мангустом, мы определяем схему, эта схема будет проверять объекты, которые мы пытаемся добавить в коллекцию, к которой мы присоединяем схему, типичный пример схемы мангуста будет выглядеть следующим образом:

import { Schema } from 'mongoose'

const UserSchema = new Schema({
  name: {
     type: String,
  },
  age: {
     type: Number
  },
  hobbies: {
    type: Array
  }
});
Войти в полноэкранный режим

Выйти из полноэкранного режима

Затем мы используем эту схему для создания модели. Всякий раз, когда мы пытаемся добавить новый документ в коллекцию, схема гарантирует, что мы определяем правильные свойства с правильными значениями. Хорошо, мы собираемся построить нашу реализацию с машинописным текстом. Сначала мы определим типы.

export  interface  ISchema {
    [Key: string]: schemaProp
}

type  schemaProp = {
    type: schmeValueType
    required?: [boolean, string]
    default?: schmeValueType
    minLength?: [number, string]
    maxLength?: [number, string]
    min?: [number, string]
    max?: [number, string]
    validate?: [(v: string) =>  boolean, string];
}

type  schmeValueType = String | Number | Boolean | Object | Array<any> | null;
Войти в полноэкранный режим

Выйти из полноэкранного режима

Мы использовали тип словаря для ввода ключа свойства в схеме, потому что мы не можем явно указать ключ свойства, но мы точно знаем, что это будет строка. Мы ожидаем, что каждый ключ в схеме будет следовать schemaProp тип. На SchemaProp type, мы определяем некоторые свойства, которые будут определять, как мы будем проверять каждое поле в объекте. Единственным обязательным свойством является typeчто эквивалентно конструктору некоторых базовых типов, предоставляемых TypeScript, давайте создадим класс схемы;

Продолжать Неткред узнать больше о это а также больше статей как это