Используйте TypeScript для улучшения проверки типов и добавления статических методов в модель Mongoose.

Что такое Мангуст?
Ха-ха.. не путайте. Я не буду говорить о нашем маленьком друге на картинке. Есть несколько способов заставить MongoDB работать с вашим приложением Node.js, и один из этих способов — использовать внешнюю библиотеку под названием Mongoose. Если вы посетите официальную страницу Mongoose, вы найдете это:
Я бы сказал, что это правда.
Но всегда есть возможность сделать наш код, нашу жизнь лучше, чем раньше. Чтобы сделать модели Mongoose лучше, давайте добавим TypeScript. Честное предупреждение, добавление TypeScript в любой существующий проект может показаться большой работой. В некотором смысле, это на самом деле много работы. Но это очень хорошо окупается…
🛠 Создание модели/схемы мангуста
Чтобы код нашего приложения мог взаимодействовать с MongoDB, мы должны сначала создать определение, известное как Модель/Схема. Мы можем думать, что это план того, как будут выглядеть наши данные и какие данные должны быть разрешены пользователю.
При работе с TypeScript рекомендуется создать тип или интерфейс. Определение свойств с помощью неявного определения типа действительно очень помогает.
💻 Время кода
➕ Сначала только JavaScript
Рассмотрим следующий пример. Здесь мы создаем модель для User, которая будет регистрироваться или входить в наше приложение. Пользователю потребуется указать свои firstName, lastName, email и password для регистрации и email и password для входа в систему. Довольно просто, правда? Наша модель Mongoose будет выглядеть примерно так (на простом JavaScript):

➕ Добавление интерфейсов TypeScript
Время ввести TypeScript. Давайте определим наш interface, который будет использоваться для проверки типов нашей модели User.

IUser— определяет, как выглядитUser, какими свойствами обладает пользовательский объект и какие типы данных разрешены.IUserDocument— определяет, как будет выглядеть схема и структура документа ответа после того, как мы запустим любой запрос для получения данных из MongoDB. IUserDocument расширяет интерфейсыIUserиDocument, реализуя свойства обоих.IUserModel— определяет, как будет выглядеть окончательная модельUser, какими свойствами она будет обладать и какие дополнительные методы она будет содержать (если они есть).
Вам может быть любопытно, что это за UserSchema.statics.buildUser? Обычно мы делаем что-то вроде let newUser = new User({...properties}), чтобы создать нового пользователя. Именно это и происходит в методе buildUser(args: IUser), присоединенном к UserSchema как статический метод.
🚨 Код, Собери!
Теперь, когда у нас есть простой код JS и интерфейсы TS, пришло время сделать все это как одно целое.

Schema<IUserDocument>— определяет структуру схемы, ожидаемые свойства и соответствующие типы данных.buildUser(args: IUser): IUserDocument— статический метод, прикрепленный к модели, является еще одним способом создания нового пользователя вместо использованияnew User({...data}).- Наконец,
User— это модель Mongoose, которая возвращает документ типаIUserDocumentи имеет методы и свойства, определенные вIUserModel.
И у нас есть! Модель saferUser, определяемая интерфейсами. Если в какой-то момент при создании нового пользователя будет передан неверный тип данных, компилятор TypeScript тут же на нас закричит и выдаст ошибки.
Подробнее о Mongoose читайте на их официальном сайте. Всегда помните, что нет ничего лучше официальной документации.

Спасибо за чтение 🙏
Если вам понравилась эта статья, обязательно ознакомьтесь с другими моими статьями, где я рассказываю о React и Node.js.
🚀 Отписка!
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.