Documentation Guide
π The Ultimate TypeScript JSDoc Documentation Guide with Better-Docs
Standardize your teamβs code documentation with strict typing, clean JSDoc tags, visual diagrams, and automatic doc site generation using the powerful better-docs template.
π Guiding Principles
Every documented entity must include:
@descriptionβ Short, one-liner description.@summaryβ Longer, detailed explanation.- Declaration tags: 
@class,@interface,@function,@const,@typedef. @templateβ For generic types/functions.@paramand@returnβ For functions, class/interface methods, and callable types.@extendsβ If extending classes/interfaces.@abstract,@protected,@privateβ Where applicable.@linkβ Cross-reference to other entities.@mermaidβ For methods/functions longer than 10 LOC.@menu,@category,@componentβ Optional, but powerful enhancements.
π’ TypeScript Object JSDoc Tag Matrix
| TypeScript Object | Required Tags | 
|---|---|
| Class | @class, @description, @summary, @template (if generic), @extends, @menu, @category | 
For methods: @param, @return, @mermaid (if >10 lines), @link, @private, @protected, @abstract | 
|
| Interface | @interface, @description, @summary, @template (if generic), @menu, @category | 
For methods: @param, @return, @link | 
|
| Function | @function, @description, @summary, @template (if generic), @param, @return, @mermaid, @menu, @category | 
| Type (typedef) | @typedef, @description, @summary, @template (if generic), @param, @return, @typeDef, @menu, @category | 
| Module | @module, @description, @summary, @menu | 
| Namespace | @namespace, @description, @summary, @menu, @category | 
| Constant | @const, @name, @description, @summary, @type, @menu, @category | 
| Enum | @const, @name, @description, @summary, @type (optional), @menu, @category | 
| Component (UI) | @component, @description, @summary, @example, @menu, @category | 
use @example and @see when required
π Notes on Key Tags
@class/@interface/@function/@typedef/@const: Always include to ensure type is properly rendered by better-docs.@description: One-liner description for quick scan/read.@summary: Paragraph-level detail; used for in-depth context.@param/@return: Must be present on all callable functions and methods.@template: Required when generics like<T>or<K, V>are used.@mermaid: Include when the method or function has more than 10 lines of logic.@extends: If the class inherits from another one.@link: When referring to other documented entities (e.g.,).User@menu/@category: Used by better-docs to organize the sidebar.@component: Special tag to tell better-docs this is a UI component (React, Vue, Angular).@private,@protected,@abstract: Visibility and inheritance markers for internal or extended logic.
π§± 1. Classes
/**
 * @class UserService
 * @description Handles all user-related data fetching and processing.
 * @summary Acts as a business logic layer between the API and UI for user entities.
 * @template T - A generic type extending User.
 * @extends {BaseService}
 * @menu Services > User
 * @category Services
 */
export class UserService<T extends User> extends BaseService {
  /**
   * @description Retrieves a user by ID.
   * @summary Fetches user data from the API and maps it to the internal model.
   * @param {number} id - Unique identifier of the user.
   * @return {Promise<T>} Resolves with the user object.
   * @link User
   * @mermaid
   * sequenceDiagram
   *     actor UI
   *     UI->>UserService: getUser(id)
   *     UserService->>API: GET /users/:id
   *     API-->>UserService: { id, name, ... }
   *     UserService-->>UI: Promise<User>
   */
  async getUser(id: number): Promise<T> {
    const res = await fetch(`/users/${id}`);
    const json = await res.json();
    return json as T;
  }
  /**
   * @description Removes a user from the in-memory cache.
   * @summary Only affects local cache, does not delete from API.
   * @param {number} id - ID of the user to remove.
   * @return {void}
   * @protected
   */
  protected removeUserFromCache(id: number): void {
    this.cache.delete(id);
  }
  /**
   * In-memory user cache.
   */
  private cache: Map<number, T> = new Map();
}
π§Ή 2. Interfaces
/**
 * @interface User
 * @description Describes the shape of a user object.
 * @summary Used across services, components, and API typing layers.
 * @menu Models
 */
export interface User {
  /** Unique user identifier. */
  id: number;
  /** Full name of the user. */
  name: string;
  /**
   * @description Returns a user-friendly display name.
   * @summary Typically used in user listings and dropdowns.
   * @return {string}
   */
  getDisplayName(): string;
}
βοΈ 3. Functions
/**
 * @function calculateDiscount
 * @description Calculates the final price after applying a discount.
 * @summary Supports both percentage and fixed-amount discounts.
 * @param {number} price - Original price.
 * @param {number} discount - Discount amount.
 * @param {boolean} isPercentage - Whether the discount is a percentage.
 * @return {number} Final price after discount.
 * @menu Utilities > Pricing
 * @category Utilities
 * @mermaid
 * sequenceDiagram
 *     participant UI
 *     UI->>calculateDiscount: price, discount, isPercentage
 *     calculateDiscount-->>UI: discounted price
 */
export function calculateDiscount(
  price: number,
  discount: number,
  isPercentage: boolean
): number {
  return isPercentage ? price * (1 - discount / 100) : price - discount;
}
𧬠4. Types (Typedefs)
/**
 * @typedef ApiResponse
 * @description A standard API response wrapper.
 * @summary Used across HTTP services to ensure consistent response shapes.
 * @template T - Payload data type.
 * @typeDef
 * @param {T} data - The actual payload.
 * @param {string} [error] - Optional error message.
 * @return {ApiResponse<T>}
 * @menu Models > Network
 * @category Networking
 */
export type ApiResponse<T> = {
  data: T;
  error?: string;
};
π 5. Modules
/**
 * @module user
 * @description User domain module.
 * @summary Includes models, services, and utils related to user management.
 * @menu Modules
 */
π 6. Namespaces
/**
 * @namespace MathUtils
 * @description A collection of reusable mathematical utilities.
 * @summary Includes clamping, rounding, and interpolation helpers.
 * @menu Utilities > Math
 */
export namespace MathUtils {
  /**
   * @description Clamps a number between two bounds.
   * @summary Ensures a value does not exceed min or max.
   * @param {number} value - The number to clamp.
   * @param {number} min - Minimum allowed value.
   * @param {number} max - Maximum allowed value.
   * @return {number} Clamped value.
   */
  export function clamp(value: number, min: number, max: number): number {
    return Math.max(min, Math.min(max, value));
  }
}
π 7. Constants
/**
 * @const API_TIMEOUT
 * @name API_TIMEOUT
 * @description Global timeout setting for all HTTP requests.
 * @summary Used to cancel requests that exceed allowed duration.
 * @type {number}
 * @menu Constants
 * @category Config
 */
export const API_TIMEOUT = 10000;
π 8. Enums
/**
 * @const LogLevel
 * @name LogLevel
 * @description Enum representing severity levels for logs.
 * @summary Enables filtering and categorizing of runtime logs.
 * @type {enum}
 * @menu Constants > Logging
 */
export enum LogLevel {
  /** Informational log */
  INFO = 'info',
  /** Recoverable warning */
  WARN = 'warn',
  /** Critical failure */
  ERROR = 'error'
}
π§Ή Advanced Better-docs Tags
π @menu
Organizes the item in the navigation sidebar.
@menu Services > User
π @category
Used to group entries visually within the same page or sidebar section.
@category Utilities
π§ @component
Used with frameworks like React, Vue, or Angular for UI docs.
π§° Suggested jsdoc.json Configuration
{
  "plugins": [
    "plugins/markdown",
    "better-docs/component",
    "better-docs/category"
  ],
  "source": {
    "include": ["src"],
    "includePattern": ".+\\.ts(x)?$"
  },
  "opts": {
    "destination": "./docs",
    "template": "node_modules/better-docs"
  },
  "tags": {
    "allowUnknownTags": ["category", "component", "menu"]
  }
}
β Final Documentation Checklist
- [x] 
@descriptionand@summaryon all documentable elements - [x] 
@paramand@returnfor all functions/methods/callables - [x] 
@templatewhere generics exist - [x] 
@extends,@abstract,@private,@protectedwhere needed - [x] 
@linkfor all internal references - [x] 
@mermaidfor any logic-heavy methods/functions (>10 lines) - [x] Use 
@menu,@category,@componentfor better organization and UI rendering 
Need help setting up the initial doc site or generating docs from your CI pipeline? Reach out to your tech lead or tooling team β or set up jsdoc + better-docs with a custom GitHub Action to automate it.
also check out the Documentation prompts section. It might just be what you need.