Как разделить типы TS между интерфейсом и сервером, если оба находятся в разных репозиториях?Javascript

Форум по Javascript
Ответить
Anonymous
 Как разделить типы TS между интерфейсом и сервером, если оба находятся в разных репозиториях?

Сообщение Anonymous »

Я боролся во всех своих проектах (личных и организационных проектах), пытаясь решить проблему совместного использования типов репозиториев, во всех существующих решениях чего-то не хватает, они либо не работают, если у вас есть отдельные репозитории, либо требуют связанного развертывания. Я уже пробовал tRPC и ts-rest, они работают нормально, но очень ограниченно, поэтому мы представили другое решение, которое в основном обслуживает типы из серверной части через https по требованию, а fs записывает их во внешний интерфейс во время сборки (подключи и работай)
Теперь начинается борьба. Для получения типов конечной точки мы использовали zod, где вы просто объявляете контракт, затем библиотека автоматически предоставляет его во время сборки и готовит для вас, что идеально, НО это неестественно, вам нужно написать определение самостоятельно,

Код: Выделить всё

const createUser = route.post('/api/users') .withBody(CreateUserSchema) .returns(UserSchema);

app.post(createUser.path, async (req) => { const input = createUser.body(req.body); // Validation const newUser= await db.create(input) return createUser.response(newUser);// you could simply return newUser also , this only for validation });
Это нормально, но выглядит неестественно. Мы попробовали аннотацию и AST (где вы пытаетесь определить типы во время сборки), но они не универсальны, поэтому мы зашли в тупик. Я больше не могу найти решений.
Есть ли решение для совместного использования типов перекрестных репозиториев, если нет, как правильно это сделать, чтобы получить лучший DX? (Аннотация AST схема Zod)?
Репо: https://github.com/malekabdelkader/TypeOwl
Документация: https://typeowl.netlify.app/

Подробнее здесь: https://stackoverflow.com/questions/798 ... -different
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»