Я мог бы создавать свои типы вручную на внешнем интерфейсе
Это, пожалуй, лучший выбор, поскольку он поощряет разделение между внешним интерфейсом и бэкэнд-приложением API. Идея автоматической генерации кода переднего плана на основе вашей базы данных звучит хорошо в теории, но ваш интерфейс не общается напрямую с БД - он общается с вашим API и не должен знать о базовом хранилище данных, которое является деталью реализации API.
Это также причина, по которой вы видите эту попытку только в монорепо - она требует жесткой связи, что очень нежелательно. Если внутренняя схема изменится, это сломает клиентов - что не произойдет, если они просто обмениваются данными через версионный API. Пока API остается согласованным, клиенты в значительной степени изолированы от изменений в бэкэнде и могут происходить в тандеме.
Также необходимо учитывать, что ActiveRecord чрезвычайно динамичен c по сравнению с все, что написано в C# и большинстве других фреймворков. Атрибуты модели автоматически определяются во время выполнения, читая схему непосредственно из базы данных - все это метапрограммирование на уровне супервинции. Таким образом, вы не можете использовать любую форму анализа stati c для создания исходного кода из одного только внутреннего кода.