Hari 6: Fungsi & Function Types
65 min
Last updated 09 Apr 2026
Function Signatures
// Annotation lengkap
function tambah(a: number, b: number): number { return a + b; }
// Optional & default parameter
function sapa(nama: string, sapaan: string = "Halo", tanda?: string): string {
return `${sapaan}, ${nama}${tanda ?? "!"}`;
}
// Rest parameter
function jumlahkan(label: string, ...angka: number[]): string {
return `${label}: ${angka.reduce((a, b) => a + b, 0)}`;
}
// Function overloads
function proses(x: number): number;
function proses(x: string): string;
function proses(x: number | string): number | string {
if (typeof x === "number") return x * 2;
return x.toUpperCase();
}
Function Types
// Type untuk fungsi
type MathOp = (a: number, b: number) => number;
const kali: MathOp = (a, b) => a * b;
// Generic function type
type Transformer = (input: T) => U;
const numToStr: Transformer = n => n.toString();
// Higher-order function dengan types
function compose(
f: (x: T) => U,
g: (y: U) => V
): (x: T) => V {
return x => g(f(x));
}
const doubleStr = compose(
(n: number) => n * 2,
(n: number) => `Hasil: ${n}`
);
console.log(doubleStr(5)); // "Hasil: 10"
💡
Notice: Type generic <T> pada fungsi memungkinkan TypeScript track tipe sepanjang chain. ini adalah fluent interface pattern yang type-safe.
Assignment
Buat type Pipeline<T> = { tambah: <U>(fn: (val: T) => U) => Pipeline<U>; nilai: () => T }. Implementasi fungsi pipe(initial) yang support chaining. Coba: pipe(5).tambah(x => x*2).tambah(x => x+3).nilai().
Expected output:
Hasil: 13
TS
index.ts
Solution
Output