Error Handling and Validation
Throw and Catch
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
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");
}
parts ← 4
5 return total / parts;6}78const parts→ 4: number = 4; //@parts=0, 2//@parts=0, 2 try
8const parts: number = 4; //@parts=0, 2910try {11 const result: number = divide(20, parts4);12 console.log(`result=${result}`);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}result ← 5
10try {11 const result→ 5: number = divide(20, parts4);12 console.log(`result=${result5}`);13} catch (error) {outputresult=5
parts ← 0
5 return total / parts;6}78const parts→ 0: number = 0;try
8const parts: number = 0;910try {11 const result: number = divide(20, parts0);12 console.log(`result=${result}`);function divide(total: number, parts: number): number
1function divide(total20: number, parts0: number): number {2 if (parts === 0) {if (parts === 0)
1function divide(total: number, parts: number): number {2 if (parts0 === 0) {3 throw new Error("parts must not be zero");4 }catch (error)
12 console.log(`result=${result}`);13} catch (error) {14 console.log("result=unavailable");15}outputresult=unavailable
parts ← 2
5 return total / parts;6}78const parts→ 2: number = 2;try
8const parts: number = 2;910try {11 const result: number = divide(20, parts2);12 console.log(`result=${result}`);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}result ← 10
10try {11 const result→ 10: number = divide(20, parts2);12 console.log(`result=${result10}`);13} catch (error) {outputresult=10