Bezpieczne typowo konstruowanie zapytań
Buduj zapytania odrzucające nieprawidłowe kolumny w czasie kompilacji
Bezpieczne typowo konstruowanie zapytań to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Zapytania, które nie mogą odwoływać się do nieznanych kolumn
Konstruktor zapytań bezpieczny pod względem typów odrzuca nazwy kolumn, które nie istnieją w tabeli, już na etapie kompilacji. Do odwoływania się do kolumn służą obiekty z typami, a nie surowe napisy.
Typowane odwołania do kolumn
Po zdefiniowaniu tabeli każda kolumna jest właściwością obiektu tabeli. Do filtrów i projekcji przekazuje się te właściwości, a nie napisy.
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));Nieznana kolumna = błąd kompilacji
Ponieważ kolumny są rzeczywistymi właściwościami, literówka zostaje wykryta natychmiast. Nie ma furtki pozwalającej ominąć kontrolę typów przez użycie napisów.
await db.select().from(users).where(eq(users.idd, 1));
// ^^^^
// Error: Property "idd" does not exist on the users table.Typowane argumenty porównań
Operatory takie jak eq są generyczne względem typu kolumny. Porównanie kolumny numerycznej z napisem jest błędem typów.
eq(users.age, 30); // ok: age is number
eq(users.age, "thirty"); // Error: string is not assignable to numberWybieranie konkretnych kolumn
Przekazanie obiektu, którego wartości są odwołaniami do kolumn, pozwala wybrać podzbiór kolumn. Wybrane klucze stają się kluczami wyniku.
const partial = await db
.select({ id: users.id, name: users.name })
.from(users);
// result rows: { id: number; name: string }[]Odrzucanie kolumn z innych tabel
Mapa select jest ograniczona do kolumn odpywanej tabeli lub tabel. Odwołanie do kolumny z niepowiązanej tabeli powoduje błąd kompilacji.
await db
.select({ title: posts.title }) // posts not in this query
.from(users);
// Error: posts.title is not part of the FROM clause.Komponowalne warunki
Warunki można łączyć za pomocą and, or i not. Każdy element zachowuje swój typ, dlatego nieprawidłowy warunek zostanie wykryty nawet głęboko w drzewie.
import { and, gt, eq } from "drizzle-orm";
const q = db.select().from(users).where(
and(gt(users.age, 18), eq(users.isAdmin, false))
);Sortowanie i ograniczanie wyników
orderBy również przyjmuje typowane odwołania do kolumn, dlatego nie można sortować według kolumny, której nie ma w tabeli.
import { desc } from "drizzle-orm";
await db.select().from(users).orderBy(desc(users.age)).limit(10);Jak działa odrzucanie nieprawidłowych wartości
Konstruktor jest generyczny względem typu tabeli. Sygnatury where i select przyjmują wyłącznie wartości typu Column<TTable>, więc kompilator odrzuca strukturalnie wszystko inne.
// Conceptual signature
declare function select<T>(
table: T,
cols: { [k: string]: ColumnOf<T> }
): Query;Wstawianie również podlega kontroli typów
Wartości wstawiane do tabeli są sprawdzane względem modelu insert. Brak wymaganych pól lub nieprawidłowe typy wartości powodują błędy kompilacji, zanim zostanie wykonane jakiekolwiek zapytanie SQL.
await db.insert(users).values({
name: "Ada",
isAdmin: false,
// missing fields would error; extra unknown keys error too
});Dlaczego to pomaga
Większość błędów w ORM wynika ze zmienionej nazwy kolumny lub nieprawidłowego jej typu, wykrytych dopiero podczas działania programu. Konstruktor bezpieczny pod względem typów zamienia je w czerwone faliste podkreślenia w edytorze, na długo przed wdrożeniem.
Szybkie sprawdzenie
Sprawdź, czy rozumiesz konstrukcję zapytań bezpieczną pod względem typów.
Podsumowanie
Konstrukcja zapytań bezpieczna pod względem typów korzysta z typowanych odwołań do kolumn zamiast napisów. Nieznane kolumny, nieprawidłowe typy operandów oraz kolumny z tabel, których nie ma w klauzuli FROM, stają się błędami kompilacji. Konstruktor jest generyczny względem tabeli, więc system typów strukturalnie wymusza poprawność.
Często zadawane pytania
Czy lekcja „Bezpieczne typowo konstruowanie zapytań” jest bezpłatna?
Tak — pełny tekst „Bezpieczne typowo konstruowanie zapytań” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Bezpieczne typowo konstruowanie zapytań”?
Buduj zapytania odrzucające nieprawidłowe kolumny w czasie kompilacji Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Bezpieczne typowo konstruowanie zapytań”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Mapowanie schematu na typ
- Bezpieczne typowo konstruowanie zapytań
- Wnioskowanie kształtów wyników zapytań
- Relacje i złączenia z typami