0Pricing
TypeScript Academy · Lezione

Costruzione di query type-safe

Costruisca query che rifiutano le colonne non valide in fase di compilazione.

Costruzione di query type-safe è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.

Query che non possono riferire colonne inesistenti

Un query builder type-safe rifiuta i nomi di colonne che non esistono nella tabella in fase di compilazione. Le colonne vengono referenziate tramite oggetti tipizzati, non tramite stringhe arbitrarie.

Riferimenti tipizzati alle colonne

Dopo aver definito una tabella, ogni colonna è una proprietà dell'oggetto tabella. Passi queste proprietà, non stringhe, ai filtri e alle select.

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));

Colonna sconosciuta = errore di compilazione

Poiché le colonne sono proprietà reali, un errore di battitura viene rilevato immediatamente. Non esiste una scorciatoia basata su stringhe non tipizzate.

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

Operandi di confronto tipizzati

Gli operatori come eq sono generici rispetto al tipo della colonna. Confrontare una colonna numerica con una stringa causa un errore di tipo.

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

Selezionare colonne specifiche

Passi un oggetto i cui valori sono riferimenti a colonne per proiettare un sottoinsieme. Le chiavi scelte diventano le chiavi del risultato.

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

Rifiutare colonne di altre tabelle

La mappa della select è vincolata alle colonne delle tabelle interrogate. Il riferimento a una colonna di una tabella non correlata impedisce la compilazione.

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

Condizioni componibili

Le condizioni si combinano con and, or e not. Ogni elemento mantiene i propri tipi, quindi una condizione malformata viene rilevata anche in profondità nell'albero.

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

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

Ordinamento e limitazione

Anche orderBy accetta riferimenti tipizzati alle colonne, quindi non è possibile ordinare per una colonna che non appartiene alla tabella.

import { desc } from "drizzle-orm";

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

Come funziona il rifiuto

Il builder è generico rispetto al tipo della tabella. Le firme di where e select accettano solo valori di tipo Column<TTable>, quindi il compilatore rifiuta strutturalmente qualsiasi altro valore.

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

Anche gli insert sono tipizzati

I valori dell'insert vengono verificati rispetto al modello di insert. I campi obbligatori mancanti o i valori del tipo errato causano errori di compilazione prima dell'esecuzione di qualsiasi istruzione SQL.

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

Perché è utile

La maggior parte dei bug negli ORM deriva da una colonna rinominata o digitata in modo errato, individuata solo a runtime. Un builder type-safe trasforma questi problemi in sottolineature rosse nell'editor, molto prima del deployment.

Verifica rapida

Verifichi la Sua comprensione della costruzione type-safe delle query.

Riepilogo

La costruzione type-safe delle query utilizza riferimenti tipizzati alle colonne invece delle stringhe. Le colonne sconosciute, gli operandi del tipo errato e le colonne di tabelle non presenti nella clausola FROM diventano tutti errori di compilazione. Il builder è generico rispetto alla tabella, quindi il sistema dei tipi impone strutturalmente la validità.

Domande Frequenti

La lezione «Costruzione di query type-safe» è gratuita?

Sì — il testo completo di «Costruzione di query type-safe» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.

Cosa imparerò in «Costruzione di query type-safe»?

Costruisca query che rifiutano le colonne non valide in fase di compilazione. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare TypeScript Academy?

Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Costruzione di query type-safe»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?

Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Mappatura da schema a tipo
  2. Costruzione di query type-safe
  3. Inferire la forma dei risultati delle query
  4. Relazioni e join con i tipi
← Torna a TypeScript Academy