TaskRefactor process(input) per the theory. Define @typedef Input as (number | string | number[]). Narrow with typeof and Array.isArray. Throw TypeError naming the unsupported type for unknown input. Log process(5), process("hi"), process([1,2,3]). Then in try/catch log the error message from process(true).
Capstone: refactor a tangled function with types
250 XP14 min
Theory
What you'll fix
The starter has a single function process(input) that handles three different kinds of input:
- number β return doubled
- string β return uppercased
- array of numbers β return sum
It has no types, no narrowing, no validation. Anything that goes in might explode.
Your job
Apply every C5 idea in one pass:
@typedeffor the union type the function actually accepts.- JSDoc
@param/@returnson the function. - Narrowing for each branch β
typeof,Array.isArray. - A clear
throwfor the unknown-input branch (with the type info in the message).
You'll go from "barely safe spaghetti" to "library-ready function in 12 lines". This is the daily refactor in any non-TS codebase.
π
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.