TypeScript Academy · Pelajaran

Pemetaan Skema kepada Jenis

Cara takrifan jadual menjadi jenis TypeScript.

Pelajaran 1 daripada 413 langkah

Pemetaan Skema kepada Jenis ialah pelajaran TypeScript Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran TypeScript Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus TypeScript Academy merangkumi sejumlah 4 pelajaran.

Daripada Takrif Jadual kepada Jenis Baris

ORM dengan keselamatan jenis membolehkan anda menerangkan jadual pangkalan data sekali sahaja dan memperoleh jenis baris TypeScript secara automatik. Anda tidak perlu menulis bentuk baris secara manual; bentuk itu dikira daripada takrif lajur.

Dalam pelajaran ini, kita menggunakan pgTable bergaya Drizzle sebagai contoh utama.

Mentakrifkan Jadual

Jadual ialah objek yang memetakan nama lajur kepada pembina lajur. Setiap pembina mengekodkan jenis SQL serta pengubah seperti notNull atau primaryKey.

import { pgTable, serial, text, integer, boolean } from "drizzle-orm/pg-core";

export const users = pgTable("users", {
  id: serial("id").primaryKey(),
  name: text("name").notNull(),
  age: integer("age"),
  isAdmin: boolean("is_admin").notNull(),
});

Inferens Jenis Lajur

Setiap pembina lajur membawa jenis bayangan yang menerangkan nilai yang dihasilkannya. serial dan integer dipetakan kepada number, text kepada string, dan boolean kepada boolean.

Pembina itu turut menjejaki sama ada lajur boleh bernilai null.

import { InferSelectModel } from "drizzle-orm";

// Row type inferred from the table above
type User = InferSelectModel<typeof users>;
// {
//   id: number;
//   name: string;
//   age: number | null;   // not notNull -> nullable
//   isAdmin: boolean;
// }

notNull Mengawal Keboleh-nullan

Pemacu paling penting bagi jenis baris ialah notNull(). Lajur TANPA fungsi ini menjadi T | null dalam jenis yang disimpulkan, kerana SQL membenarkan NULL secara lalai.

const posts = pgTable("posts", {
  id: serial("id").primaryKey(),
  title: text("title").notNull(),  // string
  subtitle: text("subtitle"),      // string | null
});

type Post = InferSelectModel<typeof posts>;
// { id: number; title: string; subtitle: string | null }

Model Pemilihan berbanding Penyisipan

Jenis baris untuk membaca (pemilihan) berbeza daripada jenis untuk menulis (penyisipan). Semasa penyisipan, lajur dengan nilai default atau kenaikan automatik menjadi pilihan.

import { InferInsertModel } from "drizzle-orm";

type NewUser = InferInsertModel<typeof users>;
// {
//   id?: number;        // serial has a default -> optional
//   name: string;
//   age?: number | null;
//   isAdmin: boolean;
// }

Cara Inferens Berfungsi

Di sebalik tabir, setiap pembina lajur ialah kelas generik seperti PgColumn<{ data: number; notNull: true }>. Jenis terpetakan menelusuri setiap kunci jadual dan membaca bendera tersebut.

// Simplified mental model of the inference
type InferRow<T> = {
  [K in keyof T]: T[K] extends { _: { data: infer D; notNull: infer N } }
    ? N extends true ? D : D | null
    : never;
};

Enum dan Jenis Tersuai

Lajur kesatuan rentetan dipetakan kepada kesatuan literal, bukan sekadar string. Ini bermakna nilai status yang tidak sah menghasilkan ralat kompilasi.

import { pgEnum } from "drizzle-orm/pg-core";

export const roleEnum = pgEnum("role", ["user", "admin", "owner"]);

export const members = pgTable("members", {
  id: serial("id").primaryKey(),
  role: roleEnum("role").notNull(), // "user" | "admin" | "owner"
});

Nilai default

.default() menjadikan lajur pilihan semasa penyisipan tetapi memastikannya wujud semasa pemilihan. Sistem jenis mengekodkan "has default" supaya sifat pilihan hanya diubah pada tempat yang sesuai.

const events = pgTable("events", {
  id: serial("id").primaryKey(),
  createdAt: text("created_at").notNull().default("now()"),
});
// Select: createdAt is string
// Insert: createdAt is optional (default fills it)

Mengapa Ini Penting

Oleh sebab jenis baris diterbitkan, perubahan skema mengemas kini setiap jenis hasil pertanyaan secara automatik. Namakan semula lajur dan pengompil menandakan setiap rujukan lama. Tiada sumber kebenaran kedua yang boleh menyimpang.

Contoh Hujung ke Hujung yang Ringkas

Menggabungkan semuanya: tentukan sekali, simpulkan jenisnya, dan gunakannya sebagai kontrak untuk fungsi repositori.

type User = InferSelectModel<typeof users>;

async function findUser(id: number): Promise<User | undefined> {
  // db.query returns rows already typed as User
  const rows = await db.select().from(users).where(eq(users.id, id));
  return rows[0];
}

Perangkap: Terlupa notNull

Jika anda terlupa menggunakan notNull() pada lajur yang sebenarnya diperlukan, jenis yang disimpulkan menjadi T | null dan memaksa semakan null yang tidak perlu di seluruh kod anda. Pastikan skema mencerminkan keadaan sebenar.

Semakan Pantas

Uji pemahaman anda tentang pemetaan skema kepada jenis.

Imbas Kembali

Anda telah mempelajari bahawa takrifan jadual ialah sumber kebenaran tunggal: pembina lajur membawa jenis hantu, jenis terpetakan menelusuri jadual untuk membina jenis baris, notNull() mengawal keboleh-nullan, dan model pemilihan berbeza daripada model penyisipan dari segi sifat pilihan. Ubah skema dan setiap jenis hasil akan mengikutinya secara automatik.

Percuma untuk bermula

Pelajari TypeScript dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
101
Pelajaran
352

Soalan Lazim

Adakah pelajaran “Pemetaan Skema kepada Jenis” percuma?

Ya — teks penuh “Pemetaan Skema kepada Jenis” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus TypeScript Academy, tingkat taraf kepada CoddyKit PRO. Kursus TypeScript Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pemetaan Skema kepada Jenis”?

Cara takrifan jadual menjadi jenis TypeScript. Anda berlatih TypeScript Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan TypeScript Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran TypeScript Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Pemetaan Skema kepada Jenis” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pemetaan Skema kepada Jenis
  2. Pembinaan Pertanyaan Selamat dari Segi Jenis
  3. Membuat Inferens Bentuk Hasil Pertanyaan
  4. Hubungan dan Cantuman dengan Jenis
← Kembali ke TypeScript Academy