throw stops the current path, and catch handles the error in one place.

throw `throw` raises an error, and a nearby `try`/`catch` can recover with fallback behavior.

Throw and Catch

parts
throw.ts
Replay: real traced execution (multi-file project)
function divide(total: number, parts: number): number {
    if (parts === 0) {
        throw new Error("parts must not be zero");
    }
    return total / parts;
}

const parts: number = 4;

try {
    const result: number = divide(20, parts);
    console.log(`result=${result}`);
} catch (error) {
    console.log("result=unavailable");
}
function divide(total: number, parts: number): number {
    if (parts === 0) {
        throw new Error("parts must not be zero");
    }
    return total / parts;
}

const parts: number = 0;

try {
    const result: number = divide(20, parts);
    console.log(`result=${result}`);
} catch (error) {
    console.log("result=unavailable");
}
function divide(total: number, parts: number): number {
    if (parts === 0) {
        throw new Error("parts must not be zero");
    }
    return total / parts;
}

const parts: number = 2;

try {
    const result: number = divide(20, parts);
    console.log(`result=${result}`);
} catch (error) {
    console.log("result=unavailable");
}
  1. parts ← 4

    5    return total / parts;6}78const parts→ 4: number = 4;  //@parts=0, 2
  2. //@parts=0, 2 try

    8const parts: number = 4;  //@parts=0, 2910try {11    const result: number = divide(20, parts4);12    console.log(`result=${result}`);
  3. function divide(total: number, parts: number): number

    1function divide(total20: number, parts4: number): number {2    if (parts === 0) {3        throw new Error("parts must not be zero");4    }5    return total / parts4;6}
  4. result ← 5

    10try {11    const result→ 5: number = divide(20, parts4);12    console.log(`result=${result5}`);13} catch (error) {
    outputresult=5
  1. parts ← 0

    5    return total / parts;6}78const parts→ 0: number = 0;
  2. try

    8const parts: number = 0;910try {11    const result: number = divide(20, parts0);12    console.log(`result=${result}`);
  3. function divide(total: number, parts: number): number

    1function divide(total20: number, parts0: number): number {2    if (parts === 0) {
  4. if (parts === 0)

    1function divide(total: number, parts: number): number {2    if (parts0 === 0) {3        throw new Error("parts must not be zero");4    }
  5. catch (error)

    12    console.log(`result=${result}`);13} catch (error) {14    console.log("result=unavailable");15}
    outputresult=unavailable
  1. parts ← 2

    5    return total / parts;6}78const parts→ 2: number = 2;
  2. try

    8const parts: number = 2;910try {11    const result: number = divide(20, parts2);12    console.log(`result=${result}`);
  3. function divide(total: number, parts: number): number

    1function divide(total20: number, parts2: number): number {2    if (parts === 0) {3        throw new Error("parts must not be zero");4    }5    return total / parts2;6}
  4. result ← 10

    10try {11    const result→ 10: number = divide(20, parts2);12    console.log(`result=${result10}`);13} catch (error) {
    outputresult=10