2.2 KiB
2.2 KiB
trigger: glob
description: Regras de tipagem para queries e mutations do Convex
globs: /*.svelte.ts,/*.svelte
Casos de Uso Válidos para
Regras de Tipagem do Convex
Regra Principal
NUNCA crie anotações de tipo manuais para queries ou mutations do Convex. Os tipos já são inferidos automaticamente pelo Convex.
❌ Errado - Não faça isso:
// NÃO crie tipos manuais para o retorno de queries
type Funcionario = {
_id: Id<'funcionarios'>;
nome: string;
email: string;
// ... outras propriedades
};
const funcionarios: Funcionario[] = useQuery(api.funcionarios.getAll) ?? [];
✅ Correto - Use inferência automática:
// O tipo já vem inferido automaticamente
const funcionarios = useQuery(api.funcionarios.getAll);
Quando Tipar É Necessário
Em situações onde você realmente precisa de um tipo explícito (ex: props de componentes, variáveis de estado, etc.), use FunctionReturnType para inferir o tipo:
import { FunctionReturnType } from 'convex/server';
import { api } from '$convex/_generated/api';
// Infere o tipo de retorno da query
type FuncionariosQueryResult = FunctionReturnType<typeof api.funcionarios.getAll>;
// Agora pode usar em props de componentes
interface Props {
funcionarios: FuncionariosQueryResult;
}
Casos de Uso Válidos para FunctionReturnType:
- Props de componentes - quando um componente filho recebe dados de uma query
- Variáveis derivadas - quando precisa tipar uma transformação dos dados
- Funções auxiliares - quando cria funções que operam sobre os dados da query
- Stores/Estado global - quando armazena dados em estado externo ao componente
Resumo
| Situação | Abordagem |
|---|---|
Usar useQuery diretamente |
Deixe o tipo ser inferido automaticamente |
| Props de componentes | Use FunctionReturnType<typeof api.module.query> |
| Transformações de dados | Use FunctionReturnType<typeof api.module.query> |
| Anotações manuais de tipo | NUNCA - sempre infira do Convex |