Learn
← Previous Next →

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