Typing Fungsi
Tipe parameter, return type, dan function type untuk callback yang aman.
Anatomi Fungsi Bertipe
function tambah(a: number, b: number): number {
return a + b;
}Dua anotasi di sini: tipe parameter a: number, b: number dan return type : number. Keduanya wajib eksplisit untuk parameter; return type bisa di-infer tapi menuliskannya adalah dokumentasi gratis.
Return Type Khusus
function logPesan(pesan: string): void {
console.log(pesan);
// tidak return apa-apa
}
function selaluError(): never {
throw new Error("gagal");
// tidak pernah return normal
}void untuk fungsi tanpa return value. never untuk fungsi yang tidak pernah selesai normal (selalu throw atau infinite loop). Bedakan dengan undefined: fungsi void boleh tidak return, tapi tetap "selesai".
Function Type: Tipe untuk Variabel Fungsi
type Validator = (nilai: string) => boolean;
const cekEmail: Validator = (email) => email.includes("@");
const cekKosong: Validator = (teks) => teks.length > 0;Ini fondasi callback yang aman. Tanpa function type, callback sering diketik any dan errornya baru muncul saat dipanggil dengan argumen salah.
Contextual Typing: Bantuan Otomatis
Saat fungsi dipakai di posisi yang tipenya sudah diketahui, TypeScript mengisi tipe parameter sendiri:
const angka = [1, 2, 3];
const kuadrat = angka.map((n) => n * n); // n otomatis number, tidak perlu ditulisKamu tidak perlu menulis (n: number) karena map pada number[] sudah memberi tahu compiler. Tulis annotation hanya saat konteksnya belum jelas.
Catatan teknis: Hati-hati dengan overload palsu via union parameter.
function f(x: string | number)bukan overload, dan di dalamnya kamu tetap harus narrowing sebelum memakai method spesifik string atau number. Untuk signature yang benar-benar berbeda, TypeScript mendukung function overloads, tapi itu topik lanjutan.