Как разделить типы 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 (где вы пытаетесь определить типы во время сборки), но они не универсальны, поэтому мы зашли в тупик. Я больше не могу найти решений.
Пожалуйста, есть ли у кого-нибудь предложения, другие решения или, может быть, даже мнение о том, следует ли нам просто придерживаться текущего решения. Пожалуйста, не говорите мне использовать GraphQL :)
Репозиторий: https://github.com/malekabdelkader/TypeOwl Документы: https://typeowl.netlify.app/

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

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