Skip to main content
JavaScript & the browser·Module C5 · Lesson 9
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

  1. Tiny scripts. One-off automation, glue between two CLI tools, a 20-line cron script. Reading the code IS reading the types.
  2. Prototype / spike. You're exploring an idea you might delete tomorrow. Don't pay the typing tax before knowing the shape sticks.
  3. Single-use callbacks. arr.map(x => x * 2) doesn't need @param {number} x — the context tells you what x is.
  4. 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.

PreviousNext lesson →

Get one Python or web tip a day — by email

Short, hand-written, no spam. Unsubscribe in one click.