API tRPC Selamat Jenis dari Hujung ke Hujung · Pelajaran

Mentakrifkan Skema Zod Kompleks

Pelajari cara mencipta skema Zod lanjutan untuk objek, tatasusunan dan peraturan pengesahan tersuai.

Pelajaran 2 daripada 412 langkah

Mentakrifkan Skema Zod Kompleks ialah pelajaran API tRPC Selamat Jenis dari Hujung ke Hujung percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran API tRPC Selamat Jenis dari Hujung ke Hujung, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus API tRPC Selamat Jenis dari Hujung ke Hujung merangkumi sejumlah 4 pelajaran.

Melangkaui Jenis Asas Zod

Selamat datang kembali! Dalam pelajaran sebelumnya, kita mempelajari jenis asas Zod seperti string, number dan boolean. Jenis ini bagus untuk pengesahan ringkas.

Namun, data dunia sebenar jarang sekali ringkas! Kita sering berurusan dengan struktur kompleks seperti profil pengguna, senarai produk atau konfigurasi bersarang.

Hari ini, kita akan mendalami cara mentakrifkan skema untuk jenis data yang lebih rumit ini, sekali gus menjadikan API tRPC anda lebih kukuh.

Membina Skema Objek

Kaedah z.object() ialah pilihan utama anda untuk mengesahkan objek JavaScript. Anda mentakrifkan skema bagi setiap sifat di dalamnya.

  • Setiap kunci dalam objek sepadan dengan satu sifat dalam data anda.
  • Nilai bagi setiap kunci ialah skema Zod yang lain, yang mentakrifkan jenis dan peraturan sifat tersebut.
  • Secara lalai, semua sifat yang ditakrifkan dalam z.object() adalah wajib.

Mari lihat cara mentakrifkan skema untuk objek pengguna yang ringkas:

import { z } from 'zod';

const UserProfileSchema = z.object({
  username: z.string().min(3),
  email: z.string().email(),
  age: z.number().int().positive()
});

Menjalankan Skema Objek

Untuk mengesahkan data terhadap skema objek, anda menggunakan kaedah .parse(). Jika data tidak sepadan, kaedah ini akan melontarkan ZodError.

Cuba jalankan contoh ini untuk melihat data objek yang sah dan tidak sah dalam tindakan!

import { z } from 'zod';

const UserProfileSchema = z.object({
  username: z.string().min(3, "Username must be at least 3 chars"),
  email: z.string().email("Invalid email format"),
  age: z.number().int().positive("Age must be a positive integer")
});

function validateUser(userData: unknown) {
  try {
    const parsedUser = UserProfileSchema.parse(userData);
    console.log("Validation Success:", JSON.stringify(parsedUser));
  } catch (error: any) {
    console.log("Validation Error:", error.issues[0].message);
  }
}

console.log("--- Valid User ---");
validateUser({
  username: "coderKid",
  email: "kid@example.com",
  age: 12
});

console.log("\n--- Invalid User (Age) ---");
validateUser({
  username: "coderKid",
  email: "kid@example.com",
  age: -5
});

Bersarangnya Objek untuk Kerumitan

Aplikasi sering mempunyai data yang disusun secara berhierarki. Zod mengendalikannya dengan baik dengan membenarkan anda menyarangkan skema objek.

Anda boleh mentakrifkan skema objek, kemudian menggunakannya sebagai jenis bagi satu sifat dalam skema objek yang lain. Ini memastikan skema anda teratur dan boleh digunakan semula.

Begini cara anda mungkin mentakrifkan skema ShippingAddress dan menyarangkannya dalam OrderSchema:

import { z } from 'zod';

const ShippingAddressSchema = z.object({
  street: z.string().min(5),
  city: z.string().min(2),
  zipCode: z.string().regex(/^\d{5}(-\d{4})?$/)
});

const OrderSchema = z.object({
  orderId: z.string().uuid(),
  items: z.array(z.string()), // Array of item IDs
  address: ShippingAddressSchema // Nested object!
});

Menggunakan Skema Tatasusunan

Apabila anda perlu mengesahkan senarai item, z.array() dapat membantu. Kaedah ini menerima satu lagi skema Zod sebagai argumen, yang mentakrifkan jenis setiap elemen dalam tatasusunan.

Anda boleh mengesahkan tatasusunan jenis asas seperti rentetan atau nombor, malah tatasusunan objek kompleks.

  • z.array(z.string()): Tatasusunan yang setiap elemennya mesti berupa rentetan.
  • z.array(z.object({...})): Tatasusunan yang setiap elemennya mesti mematuhi skema objek tertentu.
import { z } from 'zod';

const TagSchema = z.string().min(2).max(20);
const TagsArraySchema = z.array(TagSchema).min(1).max(5);

const ProductSchema = z.object({
  id: z.string().uuid(),
  name: z.string().min(3),
  price: z.number().positive(),
  tags: TagsArraySchema // Array of strings (tags)
});

Contoh Skema Tatasusunan yang Boleh Dijalankan

Mari uji z.array(). Contoh ini mentakrifkan skema untuk tatasusunan nombor, kemudian cuba mengesahkan tatasusunan yang sah dan tidak sah.

Perhatikan bahawa anda boleh merangkaikan kaedah seperti .min() dan .max() terus pada skema tatasusunan itu sendiri untuk menetapkan had panjang tatasusunan.

import { z } from 'zod';

const NumberListSchema = z.array(z.number()).min(2, "Must have at least 2 numbers").max(5, "Cannot have more than 5 numbers");

function validateNumberList(listData: unknown) {
  try {
    const parsedList = NumberListSchema.parse(listData);
    console.log("Validation Success:", JSON.stringify(parsedList));
  } catch (error: any) {
    console.log("Validation Error:", error.issues[0].message);
  }
}

console.log("--- Valid List ---");
validateNumberList([10, 20, 30]);

console.log("\n--- Invalid List (Too Short) ---");
validateNumberList([5]);

console.log("\n--- Invalid List (Wrong Type) ---");
validateNumberList([1, "two", 3]);

Kesatuan dan Enum untuk Pilihan

Kadang-kadang, sesuatu sifat boleh mempunyai salah satu daripada beberapa jenis atau nilai yang mungkin. Zod menyediakan z.union() dan z.enum() untuk keadaan ini.

  • z.union([schema1, schema2]): Membenarkan nilai sepadan dengan mana-mana satu daripada skema yang diberikan. Contohnya, status boleh berupa string atau number.
  • z.enum(['val1', 'val2']): Mengehadkan nilai rentetan kepada salah satu daripada set rentetan literal yang telah ditetapkan. Ini amat sesuai untuk kategori atau keadaan tetap.
import { z } from 'zod';

const IDSchema = z.union([z.string().uuid(), z.number().int().positive()]);

const StatusEnum = z.enum(['pending', 'processing', 'completed', 'failed']);

const TaskSchema = z.object({
  taskId: IDSchema, // Could be UUID string or positive integer
  description: z.string(),
  status: StatusEnum // Must be one of 'pending', 'processing', etc.
});

Pengesahan Tersuai dengan .refine()

Pengesah terbina dalam Zod merangkumi banyak keadaan, tetapi bagaimana jika anda mempunyai peraturan unik? Kaedah .refine() membolehkan anda menambah logik pengesahan tersuai pada mana-mana skema.

Kaedah ini menerima dua argumen:

  • Fungsi predikat yang mengembalikan true untuk data yang sah dan false untuk keadaan sebaliknya.
  • Rentetan mesej ralat atau objek dengan mesej tersuai.

.refine() dijalankan selepas semua pengesahan skema yang lain, jadi anda boleh memastikan data mempunyai jenis dan struktur asas yang betul terlebih dahulu.

import { z } from 'zod';

const PasswordSchema = z.string()
  .min(8, "Password must be at least 8 characters long")
  .refine(password => /[A-Z]/.test(password), "Password must contain at least one uppercase letter")
  .refine(password => /[0-9]/.test(password), "Password must contain at least one number");

const UserLoginSchema = z.object({
  email: z.string().email(),
  password: PasswordSchema
});

Menjalankan Contoh Refine Tersuai

Mari uji skema dengan peraturan .refine() tersuai. Kita akan memastikan rentetan tarikh yang diberikan adalah pada masa hadapan.

Ini menunjukkan betapa berkuasanya .refine() untuk menguatkuasakan logik perniagaan yang tidak diliputi oleh pemeriksaan jenis standard.

import { z } from 'zod';

const FutureDateSchema = z.string().datetime()
  .refine(
    (dateString) => new Date(dateString) > new Date(),
    "Date must be in the future"
  );

function validateFutureDate(dateInput: unknown) {
  try {
    const parsedDate = FutureDateSchema.parse(dateInput);
    console.log("Validation Success:", parsedDate);
  } catch (error: any) {
    console.log("Validation Error:", error.issues[0].message);
  }
}

console.log("--- Valid Future Date ---");
const future = new Date();
future.setDate(future.getDate() + 1);
validateFutureDate(future.toISOString());

console.log("\n--- Invalid Past Date ---");
const past = new Date();
past.setDate(past.getDate() - 1);
validateFutureDate(past.toISOString());

Sifat Pilihan & Lalai

Tidak semua sifat dalam objek sentiasa diperlukan. Zod membantu anda menandakan sifat sebagai pilihan dan malah menyediakan nilai lalai.

  • .optional(): Menjadikan sesuatu sifat pilihan. Jika sifat itu tiada, Zod tidak akan melontarkan ralat.
  • .nullable(): Membenarkan sesuatu sifat mempunyai nilai null.
  • .default(value): Menyediakan nilai sandaran jika sifat itu tiada atau undefined.

Penggunaan ciri ini menjadikan skema anda lebih fleksibel dan membolehkan data separa dikendalikan dengan baik.

import { z } from 'zod';

const UserSettingsSchema = z.object({
  theme: z.enum(['light', 'dark']).default('light'), // Default to 'light'
  notifications: z.boolean().optional(), // Optional boolean
  bio: z.string().max(200).nullable().optional() // Optional, can be null
});

Semakan Pantas Skema Zod

Anda telah belajar mentakrifkan skema objek dan tatasusunan, menggunakan kesatuan dan enum, malah menambah pengesahan tersuai. Pernyataan manakah tentang skema kompleks Zod yang TRUE?

Imbas Kembali: Menguasai Skema Kompleks

Syabas! Keupayaan anda untuk mentakrifkan pengesahan data yang kukuh dengan Zod telah meningkat dengan ketara.

Kita telah mempelajari:

  • z.object() untuk data berstruktur, termasuk pensarangannya.
  • z.array() untuk senarai item.
  • z.union() dan z.enum() untuk mengendalikan pelbagai jenis yang mungkin atau nilai yang telah ditetapkan.
  • .refine() untuk peraturan pengesahan tersuai yang berkuasa.
  • Menjadikan sifat pilihan, boleh kosong dan menetapkan nilai lalai.

Alat ini penting untuk membina API tRPC yang selamat dan boleh dijangka. Seterusnya, kita akan mengintegrasikan skema Zod ini terus ke dalam prosedur tRPC anda!

Percuma untuk bermula

Pelajari API tRPC Selamat Jenis dari Hujung ke Hujung 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
10
Pelajaran
40

Soalan Lazim

Adakah pelajaran “Mentakrifkan Skema Zod Kompleks” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran API tRPC Selamat Jenis dari Hujung ke Hujung, termasuk “Mentakrifkan Skema Zod Kompleks”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus API tRPC Selamat Jenis dari Hujung ke Hujung merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mentakrifkan Skema Zod Kompleks”?

Pelajari cara mencipta skema Zod lanjutan untuk objek, tatasusunan dan peraturan pengesahan tersuai. Anda berlatih API tRPC Selamat Jenis dari Hujung ke Hujung 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 API tRPC Selamat Jenis dari Hujung ke Hujung?

Tiada pengalaman terdahulu diperlukan. Pembelajaran API tRPC Selamat Jenis dari Hujung ke Hujung 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 2 daripada 4.

Berapa lamakah pelajaran “Mentakrifkan Skema Zod Kompleks” 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 API tRPC Selamat Jenis dari Hujung ke Hujung ini?

Ya. Setiap pelajaran API tRPC Selamat Jenis dari Hujung ke Hujung 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. Pengenalan kepada Skema Zod
  2. Mentakrifkan Skema Zod Kompleks
  3. Mengintegrasikan Zod dalam Prosedur tRPC
  4. Mengubah dan Memperincikan Data Zod
← Kembali ke API tRPC Selamat Jenis dari Hujung ke Hujung