O Tipo Compartilhado
O tipo Event que criamos no projeto web descreve a forma do JSON retornado
pelo backend. O mobile consome a mesma API, então o tipo é idêntico. Crie
src/types.ts:
export interface Event {
id: number;
title: string;
description: string;
location: string;
date: string;
capacity: number;
created_at: string;
organizer_name: string;
}
Código 8-2: Mesmo tipo do projeto web — mesma API, mesma forma de dados.
O fato de estarmos duplicando esse arquivo é intencional. Poderíamos
compartilhá-lo entre web/ e mobile/ usando npm workspaces ou um pacote
local. Mas isso adiciona complexidade no build que não se justifica por um
único arquivo. Quando a duplicação crescer — tipos de requisição, funções de
formatação, validadores — aí sim faz sentido extrair um pacote
compartilhado1.
-
npm workspaces permitem que pacotes dentro de um monorepo se referenciem sem publicar no registry. A configuração envolve um
package.jsonna raiz com"workspaces": ["backend", "web", "mobile", "shared"]e um pacoteshared/com seu própriopackage.json. O custo é lidar com resolução de módulos entre pacotes, versões do TypeScript e configuração de build — justificável quando a duplicação cresce, excessivo para um arquivo. ↩