0Pricing
TypeScript Academy · Pelajaran

Utilitas Jenis Numerik Praktis

Terapkan aritmetika jenis pada batas rentang dan panjang.

Utilitas Jenis Numerik Praktis adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Dari Teori ke Alat

Aritmetika dan perbandingan menjadi berguna ketika dikemas sebagai utilitas praktis: rentang, larik dengan panjang yang dipaksakan, dan indeks yang dibatasi. Pelajaran ini mengubah primitif menjadi sesuatu yang benar-benar dapat Anda gunakan.

type BuildTuple<N extends number, Acc extends unknown[] = []> =
  Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;

Enumerasi: 0 hingga N-1

Pembantu dasar menghasilkan gabungan semua bilangan dari 0 hingga N-1. Bangun tupel dengan panjang N, lalu baca setiap indeks kunci.

type Enumerate<N extends number, Acc extends number[] = []> =
  Acc["length"] extends N
    ? Acc[number]
    : Enumerate<N, [...Acc, Acc["length"]]>;

type A = Enumerate<4>; // 0 | 1 | 2 | 3

Tipe Rentang

Range<Start, End> menghasilkan bilangan dari Start hingga End - 1. Ambil Enumerate<End>, lalu kecualikan nilai yang berada di bawah Start.

type Range<S extends number, E extends number> =
  Exclude<Enumerate<E>, Enumerate<S>>;

type A = Range<2, 6>; // 2 | 3 | 4 | 5

Membatasi Parameter

Gunakan rentang untuk membatasi argumen yang valid. Fungsi yang hanya menerima lemparan dadu kecil dapat menggunakan Range<1, 7> sehingga kompilator menolak nilai di luar batas.

type DiceFace = Range<1, 7>; // 1|2|3|4|5|6
declare function roll(face: DiceFace): void;
roll(4); // ok
// roll(8); // compile error

Memaksakan Panjang Larik

Tipe larik dengan panjang tetap menolak larik yang ukurannya salah. Bangun tupel dengan N elemen bertipe T menggunakan rekursi.

type FixedArray<T, N extends number, Acc extends T[] = []> =
  Acc["length"] extends N ? Acc : FixedArray<T, N, [...Acc, T]>;

type RGB = FixedArray<number, 3>; // [number, number, number]

Menggunakan Panjang Tetap

Sekarang penggunaan yang salah menghasilkan kesalahan kompilasi. Titik dalam ruang 3D harus memiliki tepat tiga koordinat.

type Vec3 = FixedArray<number, 3>;
const v: Vec3 = [1, 2, 3]; // ok
// const w: Vec3 = [1, 2]; // error: missing element

Membatasi Indeks

Anda dapat membatasi tipe indeks ke posisi larik yang valid. Gabungkan panjang tupel dengan Enumerate sehingga hanya indeks yang berada dalam batas yang diterima.

type Indices<T extends readonly unknown[]> = Enumerate<T["length"]>;

type Arr = readonly ["a", "b", "c"];
type I = Indices<Arr>; // 0 | 1 | 2

Akses Terindeks yang Aman

Dengan tipe indeks yang valid, Anda dapat menulis pengambil yang parameter indeksnya tidak dapat berada di luar batas, sehingga kesalahan selisih satu terdeteksi saat kompilasi.

declare function at<T extends readonly unknown[]>(
  arr: T,
  i: Indices<T>
): T[Indices<T>];

const x = at(["a", "b", "c"] as const, 2); // ok
// at(["a", "b", "c"] as const, 3); // error

Pembantu Nilai Minimum dan Maksimum

Tambahkan perbandingan untuk memilih bilangan yang lebih besar atau lebih kecil dari dua bilangan, yang berguna untuk membatasi suatu nilai ke dalam rentang.

type Max<A extends number, B extends number> =
  GreaterThan<A, B> extends true ? A : B;
type Min<A extends number, B extends number> =
  GreaterThan<A, B> extends true ? B : A;

type X = Max<3, 8>; // 8
type Y = Min<3, 8>; // 3

Menggabungkan Utilitas

Utilitas-utilitas ini dapat digabungkan. Tupel dengan panjang dalam suatu rentang, indeks yang dibatasi ke lariknya, dan nilai yang dibatasi oleh nilai minimum dan maksimum: masing-masing adalah fungsi tingkat tipe yang kecil dan dapat digunakan kembali.

type ValidPort = Range<1, 4>; // 1 | 2 | 3 (toy example)
type Slots = FixedArray<ValidPort, 2>; // [1|2|3, 1|2|3]

Kapan Ini Layak Digunakan

Aritmetika tipe sangat berguna untuk batas kecil yang tetap: tupel RGB, sisi dadu, koordinat papan, dan ukuran bidang protokol. Teknik ini tidak layak digunakan untuk bilangan besar atau dinamis karena batas rekursi dan kerumitannya melebihi manfaat keamanannya. Gunakan ketika batasnya kecil dan jaminannya berharga.

type Board = FixedArray<FixedArray<0 | 1, 3>, 3>; // 3x3 grid

Pemeriksaan Singkat

Ujilah pemahaman Anda tentang utilitas numerik praktis.

Ringkasan

Anda telah membangun pustaka kecil berisi utilitas tipe numerik.

  • Enumerate dan Range menghasilkan gabungan bilangan.
  • FixedArray memaksakan panjang yang tepat.
  • Indices membatasi akses ke posisi yang valid.
  • Min/Max membatasi nilai.

Gunakan utilitas tersebut untuk batas kecil yang tetap. Berikutnya, Kursus 23: menyimulasikan tipe berkonstruktor tingkat tinggi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Utilitas Jenis Numerik Praktis” gratis?

Ya — teks lengkap “Utilitas Jenis Numerik Praktis” 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 “Utilitas Jenis Numerik Praktis”?

Terapkan aritmetika jenis pada batas rentang dan panjang. 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 4 dari 4.

Berapa lama pelajaran “Utilitas Jenis Numerik Praktis” 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. Menghitung dengan Panjang Tuple
  2. Penjumlahan dan Pengurangan Tingkat Jenis
  3. Perbandingan Tingkat Jenis
  4. Utilitas Jenis Numerik Praktis
← Kembali ke TypeScript Academy