Construcción de queries segura
Cree queries que rechacen columnas no válidas en tiempo de compilación.
Construcción de queries segura es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.
Consultas que no pueden referenciar columnas desconocidas
Un constructor de consultas con tipado rechaza los nombres de columnas que no existen en la tabla en tiempo de compilación. Las columnas se referencian mediante objetos con tipos, no mediante cadenas sin procesar.
Referencias de columnas con tipos
Después de definir una tabla, cada columna es una propiedad del objeto de la tabla. Pase estas propiedades, no cadenas, a los filtros y las selecciones.
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));Columna desconocida = error de compilación
Como las columnas son propiedades reales, un error tipográfico se detecta de inmediato. No existe una vía de escape basada en cadenas sin tipos.
await db.select().from(users).where(eq(users.idd, 1));
// ^^^^
// Error: Property "idd" does not exist on the users table.Operandos de comparación con tipos
Los operadores como eq son genéricos respecto al tipo de columna. Comparar una columna numérica con una cadena es un error de tipos.
eq(users.age, 30); // ok: age is number
eq(users.age, "thirty"); // Error: string is not assignable to numberSeleccionar columnas específicas
Pase un objeto cuyos valores sean referencias de columnas para proyectar un subconjunto. Las claves que elija se convertirán en las claves del resultado.
const partial = await db
.select({ id: users.id, name: users.name })
.from(users);
// result rows: { id: number; name: string }[]Rechazo de columnas de otras tablas
El mapa de selección está restringido a las columnas de las tablas consultadas. Referenciar una columna de una tabla no relacionada provoca un error de compilación.
await db
.select({ title: posts.title }) // posts not in this query
.from(users);
// Error: posts.title is not part of the FROM clause.Condiciones combinables
Las condiciones se combinan con and, or y not. Cada parte conserva sus tipos, por lo que una condición mal formada se detecta incluso en lo más profundo del árbol.
import { and, gt, eq } from "drizzle-orm";
const q = db.select().from(users).where(
and(gt(users.age, 18), eq(users.isAdmin, false))
);Ordenación y limitación
orderBy también acepta referencias de columnas con tipos, por lo que no puede ordenar por una columna que no esté en la tabla.
import { desc } from "drizzle-orm";
await db.select().from(users).orderBy(desc(users.age)).limit(10);Cómo funciona el rechazo
El constructor es genérico respecto al tipo de tabla. Las firmas de where y select solo aceptan valores de tipo Column<TTable>, por lo que el compilador rechaza estructuralmente cualquier otra cosa.
// Conceptual signature
declare function select<T>(
table: T,
cols: { [k: string]: ColumnOf<T> }
): Query;Los insert también tienen tipos
Los valores de insert se comprueban con respecto al modelo de insert. La ausencia de campos obligatorios o los tipos de valores incorrectos son errores de compilación antes de que se ejecute cualquier sentencia SQL.
await db.insert(users).values({
name: "Ada",
isAdmin: false,
// missing fields would error; extra unknown keys error too
});Por qué resulta útil
La mayoría de los errores de los ORM se deben a una columna cuyo nombre cambió o cuyo tipo es incorrecto, y se descubren únicamente en tiempo de ejecución. Un constructor con tipado convierte esos errores en subrayados rojos en el editor, mucho antes del despliegue.
Comprobación rápida
Compruebe su dominio de la construcción de consultas con tipado seguro.
Resumen
La construcción de consultas con tipado seguro utiliza referencias de columnas con tipos en lugar de cadenas. Las columnas desconocidas, los tipos de operandos incorrectos y las columnas de tablas que no aparecen en la cláusula FROM se convierten en errores de compilación. El constructor es genérico respecto a la tabla, por lo que el sistema de tipos aplica estructuralmente la validez.
Preguntas frecuentes
¿La lección «Construcción de queries segura» es gratis?
Sí — el texto completo de «Construcción de queries segura» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Construcción de queries segura»?
Cree queries que rechacen columnas no válidas en tiempo de compilación. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Construcción de queries segura»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Mapeo de esquemas a tipos
- Construcción de queries segura
- Inferencia de estructuras de resultados de queries
- Relaciones y joins con tipos