Lompati ke konten utama
Modul 6 · Pelajaran 2 dari 212/14 dalam kursus~15 min
Pelajaran modul (2/2)

Jenis yang Dipetakan

Tipe yang dipetakan memungkinkan Anda membuat tipe baru dengan mengubah properti yang sudah ada, satu per satu. Mereka dibangun di atas sintaks loop pada kunci menggunakan operator keyof.

TS
type Mapped<T> = {
  [P in keyof T]: T[P];
};

Contoh ini menunjukkan tipe yang dipetakan identik dengan yang asli: contoh ini melakukan iterasi pada setiap kunci P di keyof T dan menetapkan tipe yang sama T[P].


Pengubah Mutabilitas dan Opsionalitas

Kita dapat menambah atau menghapus pengubah seperti readonly dan ? (opsional) dengan mengawalinya dengan + (tambah, default) atau - (hapus).

Misalnya, untuk menghapus opsionalitas dari semua properti suatu tipe (membuatnya wajib):

TS
type Concrete<T> = {
  [P in keyof T]-?: T[P];
};

Pengubah -? menghapus tanda opsionalitas dari setiap properti.


Pemetaan Ulang Kunci dengan as

Di TypeScript 4.1+, Anda dapat memetakan ulang kunci dalam tipe yang dipetakan menggunakan klausa as dan tipe literal templat.

TS
type WriteSetters<T> = {
  [K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};

Di sini kita mengubah nama setiap properti K menjadi set[CapitalizedKey] dan mengubah tipenya menjadi fungsi penyetel.


Cobalah sendiri

Latihan 1: Membuat Properti Menjadi Nullable

Latihan#ts.m6.l2.e1
Upaya: 0Memuat…

Deklarasikan tipe Nullable<T> yang dipetakan secara umum yang mengambil objek T dan mengubah setiap properti sehingga dapat juga menerima nilai null (misalnya T[K] | null).

Memuat editor…
Tunjukkan petunjuk

Gunakan sintaksis [K di keyof T]: T[K] | batal; di dalam objek tipe yang dipetakan.

Solusi tersedia setelah 3 upaya

Latihan 2: Menghasilkan Pengambil Dinamis dengan as

Latihan#ts.m6.l2.e2
Upaya: 0Memuat…

Buat tipe yang dipetakan bernama GetterNames<T> yang mengubah kunci objek T dengan mengawalinya dengan 'get' dan menggunakan huruf besar pada kunci asli (gunakan Kapital). Misalnya, jika kuncinya adalah nama, maka harus menjadi getName. Atur tipe propertinya menjadi () => T[K].

Memuat editor…
Tunjukkan petunjuk

Gunakan sebagai \`get\${Capitalize<string & K>}\` untuk memetakan ulang kunci dan () => T[K] sebagai tipe pengembalian properti.

Solusi tersedia setelah 3 upaya