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.
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):
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.
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
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).
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
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].
Tunjukkan petunjuk
Gunakan sebagai \`get\${Capitalize<string & K>}\` untuk memetakan ulang kunci dan () => T[K] sebagai tipe pengembalian properti.
Solusi tersedia setelah 3 upaya