Pelajaran modul (1/2)
Jenis Bersyarat dan menyimpulkan
Tipe bersyarat memungkinkan Anda untuk mengekspresikan keputusan tipe non-sepele berdasarkan hubungan pewarisan. Sintaksnya menyerupai operator ternary JavaScript:
T extends U ? X : YJika tipe T dapat ditetapkan ke U, maka tipe yang dihasilkan adalah X, jika tidak maka akan menjadi Y.
Tipe Bersyarat Dasar
Tipe bersyarat mengevaluasi suatu kondisi pada waktu kompilasi:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falsePola ini sangat kuat bila dikombinasikan dengan obat generik untuk menciptakan tipe utilitas yang fleksibel dan dinamis.
Ketik Ekstraksi dengan infer
Di dalam klausa extends bertipe kondisional, kita dapat menggunakan kata kunci infer untuk mendeklarasikan variabel tipe yang akan disimpulkan oleh kompiler.
Misalnya, jika kita ingin mengekstrak tipe kembalian suatu fungsi:
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // stringDalam contoh ini, infer R memberitahu TypeScript untuk secara otomatis menentukan tipe kembalian fungsi dan membuatnya tersedia sebagai R di cabang positif kondisional.
Cobalah sendiri
Latihan 1: Tipe IsString
Buat tipe generik bernama IsString<T> yang mengembalikan tipe literal benar jika T memperluas string, jika tidak salah.
Tunjukkan petunjuk
Gunakan tipe sintaksis IsString<T> = T extends string ? benar : salah; untuk memeriksa jenisnya.
Solusi tersedia setelah 3 upaya
Latihan 2: Mengekstrak tipe dari Array dengan infer
Tentukan tipe generik UnpackArray<T> yang menggunakan infer untuk mengekstrak tipe elemen array T. Jika T adalah array (misalnya U[]), kembalikan U, jika tidak, kembalikan tipe T yang sama.
Tunjukkan petunjuk
Gunakan T extends (simpulkan U)[] ? U : T untuk mendeklarasikan dan mengembalikan variabel tipe yang disimpulkan U.
Solusi tersedia setelah 3 upaya