Parameter Optional dan Default
Tanda tanya, nilai default, dan rest parameter: fleksibilitas tanpa kehilangan keamanan tipe.
Parameter Optional dengan ?
function sapa(nama: string, sapaan?: string): string {
return `${sapaan ?? "Halo"}, ${nama}!`;
}
sapa("Ana"); // ok -> "Halo, Ana!"
sapa("Ana", "Hai"); // ok -> "Hai, Ana!"Tanda ? membuat parameter boleh dilewatkan. Di dalam fungsi, tipenya menjadi string | undefined, jadi kamu wajib menanganinya (di contoh ini dengan ??).
Nilai Default
function buatUser(nama: string, peran: string = "pengguna"): string {
return `${nama} (${peran})`;
}
buatUser("Ana"); // peran otomatis "pengguna"Parameter dengan default otomatis dianggap optional oleh pemanggil, tapi di dalam fungsi tipenya tetap string murni (tidak ada undefined) karena default selalu mengisi. Ini lebih nyaman daripada ? bila ada nilai fallback yang jelas.
Rest Parameter Bertipe
function jumlahkan(...angka: number[]): number {
return angka.reduce((total, n) => total + n, 0);
}
jumlahkan(1, 2, 3); // 6
jumlahkan(1, "dua"); // Error: string tidak masuk number[]Rest parameter diketik sebagai array. Semua argumen tambahan dicek satu per satu.
Aturan Urutan
Parameter optional dan ber-default harus diletakkan setelah parameter wajib:
function salah(a?: string, b: string) {} // Error: A required parameter cannot follow an optional parameter.
function benar(a: string, b?: string) {} // okCatatan teknis:
param?: stringdanparam: string | undefinedhampir sama, tapi tidak identik. DenganexactOptionalPropertyTypes: true,?berarti "boleh absen", sedangkan| undefinedberarti "boleh diisi undefined eksplisit". Untuk kebanyakan project, perbedaan ini tidak terasa, tapi opsi itu ada kalau kamu butuh presisi ekstra.