Как я перенес проект JavaScript, в котором использовался Mongoose, на TypeScript

Несколько месяцев назад моя команда начала перемещать проект JavaScript, предназначенный только для использования в качестве объектного модуля доступа к данным для коллекций Mongo с использованием Mongoose, на использование TypeScript. Основная причина этой «миграции» заключалась в том, чтобы иметь четко определенный интерфейс для каждого свойства и метода (статического и экземпляра), доступных для каждой модели / документа.

Чтобы сделать этот процесс постепенным, мы не перенесли каждую коллекцию сразу, а следуем следующему процессу:

  • Создайте правильный скрипт для сборки кода TS в JS
  • Измените точку входа для модуля
  • Начать перенос файлов

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

В процессе мы узнаем:

  • Как создать четко определенную модель и документ
  • Как избежать создания нового свойства или метода, которые не определены в экспортируемом интерфейсе

Вот основные шаги:

  • Определите «интерфейс» со всеми свойствами для вашего документа. Здесь вы определяете свойства будущей коллекции, но с типами ts без типов мангуста (в конце они должны быть «одного типа»).
  • Определите «интерфейс», расширяющий предыдущий (тот, который имеет необходимые свойства) и интерфейс «Документ» из мангуста. В этом интерфейсе вы собираетесь определить каждый метод, который будет доступен для каждого документа мангуста (это методы экземпляра).
  • Определите «интерфейс» для модели (это коллекция), расширяющий интерфейс «Модель» в mongoose, используя универсальные шаблоны с ранее определенным интерфейсом для документа. В этом интерфейсе вы собираетесь определить доступные методы для коллекции (статические).
  • Определите объект, набранный с ключами для первого интерфейса (тот, у которого есть свойства для модели). Определение этого объекта с помощью этого типа заставляет вас определять каждое свойство в интерфейсе. Этот объект будет использоваться для создания схемы. Тип для каждого свойства будет доступен тип Mongoose.
  • Создайте «mongoose.Schema» с ранее определенным объектом.
  • Добавить методы экземпляра и статические методы в определенную схему
  • Создайте модель мангуста, используя дженерики с ранее определенным интерфейсом для документа и модели.

Дополнительная точка

Вы также можете добавить статические свойства для своей модели Mongoose. Статические свойства должны быть определены в интерфейсе модели и добавлены в схему с помощью свойства «статика».

Вот полный пример:

И, как видите, теперь вы можете импортировать модель и иметь свойства и методы автозаполнения.

Надеюсь, это было полезно, и дайте мне знать, если мы можем улучшить этот метод.

Больше контента на plainenglish.io