TaskDefine class TooSmallError extends Error and class TooBigError extends Error. Write checkAge(n) that throws TooSmallError if n < 0, TooBigError if n > 120, returns n otherwise. Loop over [-1, 50, 200, 30], call checkAge in try/catch, narrow with instanceof, log: 'small' / 'big' / value / 'unknown'.
Narrowing errors with instanceof
125 XP8 min
Theory
Different errors, different handlers
A catch block gets a single err variable but errors come in many shapes. Use instanceof to branch:
try {
await fetchUser(id);
} catch (err) {
if (err instanceof NotFoundError) {
return null; // silently treat 404 as no result
}
if (err instanceof RateLimitError) {
await sleep(err.retryAfter * 1000);
return fetchUser(id); // retry once
}
throw err; // unknown β let it bubble
}Always end with a re-throw
If you didn't handle the error type, you DON'T know what it is. throw err at the bottom of every catch is the safe default. Swallowing errors silently is one of the most common bugs in JS code.
TypeScript-aware editors
In a .js project with JSDoc types, editors narrow the type inside each instanceof branch β same intellisense as TypeScript. Lesson C5-04 is the foundation.
π
Sign up to start coding
Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β card required, cancel anytime.
Sign up β free trial βFirst 10 lessons in each track are free. No card needed for those.