0Pricing
TypeScript Academy · Pelajaran

Batasan Generik: Mempersempit Parameter Tipe

Gunakan extends untuk memberlakukan persyaratan bentuk pada generik.

Batasan Generik: Mempersempit Parameter Tipe 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.

Selamat Datang

Batasan generik tingkat lanjut memungkinkan Anda mempersempit tipe yang dapat digunakan sebagai argumen tipe, sehingga operasi pada bentuk kompleks menjadi aman secara tipe.

Ringkasan Batasan

T extends U membatasi T pada tipe yang merupakan subtipe U. Dengan demikian, TypeScript mengetahui bentuk T di dalam fungsi.
function len<T extends { length: number }>(val: T): number {
  return val.length;
}

Membatasi pada Metode Tertentu

Wajibkan T memiliki metode tertentu dengan membatasinya pada antarmuka yang memiliki metode tersebut.
interface Stringable { toString(): string; }
function stringify<T extends Stringable>(val: T): string {
  return val.toString();
}

Menyimpulkan dari Batasan

Gunakan keyof di dalam batasan untuk membuat pengakses yang aman.
function pluck<T, K extends keyof T>(items: T[], key: K): T[K][] {
  return items.map(item => item[key]);
}
const names = pluck(users, 'name'); // string[]

Batasan Berkategori Lebih Tinggi (Disimulasikan)

TypeScript tidak mendukung tipe berkategori lebih tinggi yang sebenarnya, tetapi Anda dapat menyimulasikannya dengan tipe kondisional dan batasan.

Membatasi pada Tipe Primitif

Batasi parameter tipe pada tipe primitif tertentu untuk fungsi khusus.
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
function isPrimitive<T extends Primitive>(val: T): true { return true; }

Batasan Rekursif

Batasan dapat merujuk dirinya sendiri untuk pola rekursif.
interface Comparable<T> { compareTo(other: T): number; }
function sort<T extends Comparable<T>>(items: T[]): T[] {
  return [...items].sort((a, b) => a.compareTo(b));
}

Batasan dengan Nilai Bawaan

Parameter tipe dapat memiliki batasan sekaligus nilai bawaan. Nilai bawaan tersebut harus memenuhi batasan.
function process<T extends object = Record<string, unknown>>(data: T): void {
  console.log(Object.keys(data));
}

T extends Record<string, unknown>

Batasi pada tipe rekaman agar akses properti dinamis dapat dilakukan.
function getValue<T extends Record<string, unknown>>(obj: T, key: string): unknown {
  return obj[key];
}

Inferensi Batasan dalam Tipe Hasil

Saat T memiliki batasan, TypeScript menggunakan batasan tersebut untuk menentukan operasi yang valid pada tipe hasil.
function firstKey<T extends object>(obj: T): keyof T {
  return Object.keys(obj)[0] as keyof T;
}

Utilitas NoInfer (TS 5.4)

TypeScript 5.4 memperkenalkan NoInfer untuk mencegah parameter tipe diinferensikan dari posisi argumen tertentu.
function createState<T>(initial: T, fallback: NoInfer<T>): T {
  return initial ?? fallback;
}

Pemeriksaan Singkat

Apa yang ditambahkan `T extends { length: number }` pada T di dalam fungsi generik?

Ringkasan

Batasan tingkat lanjut mempersempit tipe generik menjadi bentuk, metode, atau gabungan primitif tertentu. Gabungkan dengan keyof, pola rekursif, dan nilai bawaan untuk membuat utilitas yang kuat dan aman secara tipe.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Batasan Generik: Mempersempit Parameter Tipe” gratis?

Ya — teks lengkap “Batasan Generik: Mempersempit Parameter Tipe” 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 “Batasan Generik: Mempersempit Parameter Tipe”?

Gunakan extends untuk memberlakukan persyaratan bentuk pada generik. 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 “Batasan Generik: Mempersempit Parameter Tipe” 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. Tipe Akses keyof dan Terindeks
  2. Batasan Generik: Mempersempit Parameter Tipe
  3. Tipe Kondisional: T extends U ? X : Y
  4. Tipe Kondisional Distributif
← Kembali ke TypeScript Academy