Assertion Functions
Karena sifat JavaScript yang fleksibel, menambahkan pemeriksaan
tipe data merupakan ide yang bagus untuk memastikan asumsi Anda
Hal-hal ini biasanya disebut _assertions_ (atau _invariants_)
_Assertions_ merupakan sebuah fungsi kecil yang mengeluarkan pesan
kesalahan dini ketika variabel yang diberikan tidak sesuai
dengan apa yang Anda harapkan.
Node menyediakan fungsi bawaan untuk menyelesaikan masalah ini.
Fungsi tersebut bernama `assert` dan fungsi tersebut tersedia
tanpa harus melakukan `import` terlebih dahulu.
Sekarang, kita akan membuat fungsi `assert` kita sendiri.
Kode program di bawah ini akan mendeklarasikan fungsi yang
menegaskan bahwa ekspresi yang bernama `value` bernilai
`true`.
// Sekarang, kita akan menggunakan fungsi tersebut untuk
memeriksa tipe dari sebuah `enum`
declare function assert(value: unknown): asserts value;
// Dengan TypeScript versi 3.7, fitur analisis alur kode dapat
menggunakan fungsi-fungsi semacam ini untuk mengetahui
maksud dari kode program. Jadi, ketika Anda menyorot
variabel di bawah ini - Anda dapat melihat bahwa variabel
tersebut telah dipersempit dari sebuah _string_ atau bilangan
menjadi hanya sebuah _string_
declare const mungkinAngkaAtauString: string | number;
assert(typeof mungkinAngkaAtauString === "string");
// Anda dapat menggunakan fungsi _assertion_ untuk menjamin
tipe di seluruh kode program Anda, contohnya TypeScript
mengetahui bahwa fungsi ini akan mengembalikan sebuah
bilangan tanpa perlu penambahan tipe pada parameter
melalui deklarasi _assert_ pada baris sebelumnya
mungkinAngkaAtauString;
// Fungsi _assertion_ merupakan saudara dari _Type Guards_
Hal yang membedakan adalah _type-guards_ mempengaruhi alur
kode seiring berjalannya fungsi.
Contohnya, kita dapat menggunakan fungsi _assertion_ untuk
mempersempit tipe dari sebuah _enum_ seiring berjalannya
waktu.
function perkalian(x: any, y: any) {
assert(typeof x === "number");
assert(typeof y === "number");
return x * y;
}
// Hal-hal diatas adalah dasar dari beberapa fitur yang dimiliki
oleh fungsi _assertion_ pada TypeScript versi 3.7 - Anda dapat
mengetahui lebih lanjut dengan membaca catatan rilis TypeScript
versi 3.7:
https://devblogs.microsoft.com/typescript/announcing-typescript-3-7/
declare const salahSatuDariLimaBilanganPertama: 1 | 2 | 3 | 4 | 5;
declare function adalahGanjil(param: unknown): asserts param is 1 | 3 | 5;
declare function adalahDibawahEmpat(param: unknown): asserts param is 1 | 2 | 3 | 4;
// Hal ini seharusnya mempersempit _enum_ menjadi: 1 | 3 | 5
adalahGanjil(salahSatuDariLimaBilanganPertama);
salahSatuDariLimaBilanganPertama;
// Hal ini akan memotong nilai _enum_ yang mungkin menjadi: 1 | 3
adalahDibawahEmpat(salahSatuDariLimaBilanganPertama);
salahSatuDariLimaBilanganPertama;