0Pricing
TypeScript Academy · Pelajaran

Pembuatan Kueri yang Aman Secara Jenis

Bangun kueri yang menolak kolom tidak valid saat kompilasi.

Pembuatan Kueri yang Aman Secara Jenis adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.

Kueri yang Tidak Dapat Merujuk Kolom Tidak Dikenal

Pembangun kueri yang aman tipe menolak nama kolom yang tidak ada di tabel saat kompilasi. Anda merujuk kolom melalui objek bertipe, bukan teks mentah.

Rujukan Kolom Bertipe

Setelah mendefinisikan tabel, setiap kolom menjadi properti pada objek tabel. Anda meneruskan properti ini, bukan teks, ke penyaring dan 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));

Kolom Tidak Dikenal = Galat Kompilasi

Karena kolom adalah properti nyata, salah ketik segera terdeteksi. Tidak ada jalan keluar berbasis teks.

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

Operan Perbandingan Bertipe

Operator seperti eq bersifat generik terhadap tipe kolom. Membandingkan kolom angka dengan teks adalah galat tipe.

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

Memilih Kolom Tertentu

Teruskan objek yang nilainya berupa rujukan kolom untuk memproyeksikan sebagian data. Kunci yang Anda pilih menjadi kunci hasil.

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

Menolak Kolom dari Tabel Lain

Peta select dibatasi pada kolom dari tabel yang dikuerikan. Merujuk kolom dari tabel yang tidak terkait menyebabkan kompilasi gagal.

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

Kondisi yang Dapat Dirangkai

Kondisi dapat digabungkan dengan and, or, dan not. Setiap bagian tetap bertipe, sehingga kondisi yang salah bentuk terdeteksi bahkan jauh di dalam pohon.

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

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

Pengurutan dan Pembatasan

orderBy juga menerima rujukan kolom bertipe, sehingga Anda tidak dapat mengurutkan berdasarkan kolom yang tidak ada di tabel.

import { desc } from "drizzle-orm";

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

Cara Penolakan Bekerja

Pembangun bersifat generik terhadap tipe tabel. Tanda tangan where dan select hanya menerima nilai bertipe Column<TTable>, sehingga kompilator secara struktural menolak apa pun yang lain.

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

Insert Juga Bertipe

Nilai insert diperiksa terhadap model insert. Kolom wajib yang hilang atau tipe nilai yang salah menjadi galat kompilasi sebelum SQL apa pun dijalankan.

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

Mengapa Ini Membantu

Sebagian besar galat ORM berasal dari kolom yang diganti nama atau salah tipe dan baru ditemukan saat waktu berjalan. Pembangun yang aman tipe mengubahnya menjadi garis bergelombang merah di penyunting Anda, jauh sebelum penerapan.

Pemeriksaan Singkat

Pastikan pemahaman Anda tentang penyusunan kueri yang aman tipe.

Rangkuman

Penyusunan kueri yang aman tipe menggunakan rujukan kolom bertipe, bukan teks. Kolom yang tidak dikenal, tipe operan yang salah, dan kolom dari tabel yang tidak terdapat dalam klausa FROM semuanya menjadi galat kompilasi. Pembangun bersifat generik terhadap tabel, sehingga sistem tipe secara struktural menegakkan keabsahan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pembuatan Kueri yang Aman Secara Jenis” gratis?

Ya — teks lengkap “Pembuatan Kueri yang Aman Secara Jenis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pembuatan Kueri yang Aman Secara Jenis”?

Bangun kueri yang menolak kolom tidak valid saat kompilasi. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Pembuatan Kueri yang Aman Secara Jenis” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pemetaan Skema ke Jenis
  2. Pembuatan Kueri yang Aman Secara Jenis
  3. Menyimpulkan Bentuk Hasil Kueri
  4. Relasi dan Join dengan Jenis
← Kembali ke TypeScript Academy