0Pricing
TypeScript Academy · Aula

Construção de Consultas com Segurança de Tipos

Crie consultas que rejeitem colunas inválidas em tempo de compilação.

Construção de Consultas com Segurança de Tipos é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.

Consultas que Não Podem Referenciar Colunas Desconhecidas

Um construtor de consultas com segurança de tipos rejeita, no momento da compilação, nomes de colunas que não existem na tabela. Você referencia colunas por meio de objetos tipados, não de cadeias de caracteres brutas.

Referências Tipadas a Colunas

Depois de definir uma tabela, cada coluna é uma propriedade do objeto da tabela. Você passa essas propriedades, não cadeias de caracteres, para filtros e seleções.

import { eq } from "drizzle-orm";

// users.id and users.name are typed column objects
const rows = await db
  .select()
  .from(users)
  .where(eq(users.id, 1));

Coluna Desconhecida = Erro de Compilação

Como as colunas são propriedades reais, um erro de digitação é detectado imediatamente. Não há uma brecha baseada em cadeias de caracteres para contornar a tipagem.

await db.select().from(users).where(eq(users.idd, 1));
//                                          ^^^^ 
// Error: Property "idd" does not exist on the users table.

Operandos de Comparação Tipados

Operadores como eq são genéricos em relação ao tipo da coluna. Comparar uma coluna numérica com uma cadeia de caracteres é um erro de tipo.

eq(users.age, 30);       // ok: age is number
eq(users.age, "thirty"); // Error: string is not assignable to number

Selecionando Colunas Específicas

Passe um objeto cujos valores sejam referências de colunas para projetar um subconjunto. As chaves escolhidas se tornam as chaves do resultado.

const partial = await db
  .select({ id: users.id, name: users.name })
  .from(users);
// result rows: { id: number; name: string }[]

Rejeitando Colunas de Outras Tabelas

O mapa de seleção é restrito às colunas das tabelas consultadas. Referenciar uma coluna de uma tabela não relacionada impede a compilação.

await db
  .select({ title: posts.title }) // posts not in this query
  .from(users);
// Error: posts.title is not part of the FROM clause.

Condições Combináveis

As condições podem ser combinadas com and, or e not. Cada parte continua tipada, portanto uma condição malformada é detectada mesmo no interior de uma árvore complexa.

import { and, gt, eq } from "drizzle-orm";

const q = db.select().from(users).where(
  and(gt(users.age, 18), eq(users.isAdmin, false))
);

Ordenação e Limitação

orderBy também aceita referências tipadas de colunas, portanto você não pode ordenar por uma coluna que não esteja na tabela.

import { desc } from "drizzle-orm";

await db.select().from(users).orderBy(desc(users.age)).limit(10);

Como a Rejeição Funciona

O construtor é genérico em relação ao tipo da tabela. As assinaturas de where e select aceitam somente valores do tipo Column<TTable>, portanto o compilador rejeita estruturalmente qualquer outra coisa.

// Conceptual signature
declare function select<T>(
  table: T,
  cols: { [k: string]: ColumnOf<T> }
): Query;

As Inserções Também São Tipadas

Os valores de inserção são verificados em relação ao modelo de inserção. Campos obrigatórios ausentes ou tipos de valores incorretos geram erros de compilação antes que qualquer SQL seja executado.

await db.insert(users).values({
  name: "Ada",
  isAdmin: false,
  // missing fields would error; extra unknown keys error too
});

Por Que Isso Ajuda

A maioria dos erros de ORM vem de uma coluna renomeada ou com tipo incorreto, descoberta somente em tempo de execução. Um construtor com segurança de tipos transforma esses problemas em sublinhados vermelhos no seu editor, muito antes da implantação.

Verificação Rápida

Verifique sua compreensão da construção de consultas com segurança de tipos.

Recapitulação

A construção de consultas com segurança de tipos usa referências tipadas a colunas em vez de cadeias de caracteres. Colunas desconhecidas, tipos de operandos incorretos e colunas de tabelas que não estão na cláusula FROM se tornam erros de compilação. O construtor é genérico em relação à tabela, portanto o sistema de tipos impõe estruturalmente a validade.

Perguntas Frequentes

A aula “Construção de Consultas com Segurança de Tipos” é grátis?

Sim — o texto completo de “Construção de Consultas com Segurança de Tipos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.

O que vou aprender em “Construção de Consultas com Segurança de Tipos”?

Crie consultas que rejeitem colunas inválidas em tempo de compilação. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar TypeScript Academy?

Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Construção de Consultas com Segurança de Tipos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de TypeScript Academy?

Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Mapeamento de Esquema para Tipo
  2. Construção de Consultas com Segurança de Tipos
  3. Inferindo Estruturas de Resultados de Consultas
  4. Relações e Junções com Tipos
← Voltar para TypeScript Academy