TaskTwo functions in starter. (1) Add @param/@returns JSDoc to the exported greet(name) — it's a library API. (2) Leave bumpCount(state) alone — it's local. Call greet("world") and bumpCount({n:0}) and log both.
When NOT to add types
100 XP7 min
Theory
Types have a real cost
JSDoc is free at runtime, but it adds visual noise and maintenance. Every @param is one more thing that has to stay in sync with the code. For some files, the cost beats the benefit.
Skip types when
- Tiny scripts. One-off automation, glue between two CLI tools, a 20-line cron script. Reading the code IS reading the types.
- Prototype / spike. You're exploring an idea you might delete tomorrow. Don't pay the typing tax before knowing the shape sticks.
- Single-use callbacks.
arr.map(x => x * 2)doesn't need@param {number} x— the context tells you what x is. - REPL experiments. Console snippets, code golf, throwaway demos.
Reach for types when
- The function is called from 3+ places.
- The return value is consumed by code you don't own.
- The parameters could legitimately be more than one shape (union types).
- You're touching a function whose bug is "wrong arg type came in".
The shape of the rule
> Types pay for themselves at the interface, not the implementation.
Type /* lib */ exports. Skip types on /* local */ helpers a few lines below.
The task
Look at the two functions in the starter. One is a 4-line internal helper. The other is a module-exported library function called from elsewhere. Add JSDoc to the EXPORTED one only.
🔒
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.