Как я перенес проект JavaScript, в котором использовался Mongoose, на TypeScript
Несколько месяцев назад моя команда начала перемещать проект JavaScript, предназначенный только для использования в качестве объектного модуля доступа к данным для коллекций Mongo с использованием Mongoose, на использование TypeScript. Основная причина этой «миграции» заключалась в том, чтобы иметь четко определенный интерфейс для каждого свойства и метода (статического и экземпляра), доступных для каждой модели / документа.
Чтобы сделать этот процесс постепенным, мы не перенесли каждую коллекцию сразу, а следуем следующему процессу:
- Создайте правильный скрипт для сборки кода TS в JS
- Измените точку входа для модуля
- Начать перенос файлов
Одной из основных целей было никогда не нарушать определенный интерфейс во время процесса, потому что этот модуль используется многими другими проектами для доступа к требуемым данным.
В процессе мы узнаем:
- Как создать четко определенную модель и документ
- Как избежать создания нового свойства или метода, которые не определены в экспортируемом интерфейсе
Вот основные шаги:
- Определите «интерфейс» со всеми свойствами для вашего документа. Здесь вы определяете свойства будущей коллекции, но с типами ts без типов мангуста (в конце они должны быть «одного типа»).
- Определите «интерфейс», расширяющий предыдущий (тот, который имеет необходимые свойства) и интерфейс «Документ» из мангуста. В этом интерфейсе вы собираетесь определить каждый метод, который будет доступен для каждого документа мангуста (это методы экземпляра).
- Определите «интерфейс» для модели (это коллекция), расширяющий интерфейс «Модель» в mongoose, используя универсальные шаблоны с ранее определенным интерфейсом для документа. В этом интерфейсе вы собираетесь определить доступные методы для коллекции (статические).
- Определите объект, набранный с ключами для первого интерфейса (тот, у которого есть свойства для модели). Определение этого объекта с помощью этого типа заставляет вас определять каждое свойство в интерфейсе. Этот объект будет использоваться для создания схемы. Тип для каждого свойства будет доступен тип Mongoose.
- Создайте «mongoose.Schema» с ранее определенным объектом.
- Добавить методы экземпляра и статические методы в определенную схему
- Создайте модель мангуста, используя дженерики с ранее определенным интерфейсом для документа и модели.
Дополнительная точка
Вы также можете добавить статические свойства для своей модели Mongoose. Статические свойства должны быть определены в интерфейсе модели и добавлены в схему с помощью свойства «статика».
Вот полный пример:
И, как видите, теперь вы можете импортировать модель и иметь свойства и методы автозаполнения.
Надеюсь, это было полезно, и дайте мне знать, если мы можем улучшить этот метод.
Больше контента на plainenglish.io