Optional Chaining
_Optional Chaining_ mencapai konsesus TC39 Tahap 3 ketika
TypeScript 3.7 sedang dikembangkan. _Optional Chaining_
mengizinkan Anda untuk menulis kode yang akan langsung berhenti
menjalankan ekspresi ketika sebuah nilai null dan undefined
ditemukan.
Akses Properti
Coba bayangkan bahwa ada sebuah album dimana artis dan
biografinya mungkin tidak tertera pada data album tersebut.
Contohnya, sebuah album kompilasi bisa saja sama sekali
tidak memiliki seorang artis.
// Dengan _optional chaining_, Anda dapat
menulis kode seperti berikut:
type ResponAPIAlbum = {
judul: string;
artis?: {
nama: string;
biografi?: string;
albumSebelumnya?: string[];
};
};
declare const album: ResponAPIAlbum;
// Pada kasus ini, operator ?. akan mengambil tindakan yang berbeda bila
dibandingkan dengan operator && karena operator && akan
bertindak berbeda pada nilai "falsy" (contoh: sebuah string kosong,
0, NaN, dan false).
_Optional chaining_ hanya akan menganggap null atau undefined
sebagai sebuah sinyal untuk berhenti dan mengembalikan nilai undefined.
Akses Elemen Opsional
Properti dapat diakses melalui operator., _optional chaining_
juga dapat digunakan dengan operator [] ketika mengakses elemen
const biografiArtis = album?.artis?.biografi;
// Dibandingkan dengan:
const mungkinBiografiArtis = album.artis && album.artis.biografi;
// Ketika berurusan dengan fungsi yang mungkin tidak ada
pada saat program berjalan (runtime), _optional chaining_ mendukung
kasus-kasus dimana sebuah fungsi hanya akan dipanggil
jika fungsi tersebut ada. Hal tersebut dapat menggantikan kode yang
biasanya ditulis seperti: if (func) func()
Sebagai contoh, disini terdapat sebuah pemanggilan opsional
pada _callback_ dari sebuah permintaan API
const mungkinElemenBiografiArtis = album?.["artis"]?.["biografi"];
const mungkinAlbumSebelumnyaYangPertama = album?.artis?.albumSebelumnya?.[0];
// Pemanggilan Opsional
const panggilPembaruanMetadata = (metadata: any) => Promise.resolve(metadata); // Pemanggilan API palsu
const perbaruiMetadataAlbum = async (metadata: any, callback?: () => void) => {
await panggilPembaruanMetadata(metadata);
callback?.();
};
// Anda dapat membaca lebih lanjut tentang _optional chaining_
// pada tulisan blog TypeScript 3.7:
//
// https://devblogs.microsoft.com/typescript/announcing-typescript-3-7/