Function Overloads in TypeScript
Function Overloads in TypeScript
Section titled “Function Overloads in TypeScript”Basic Overloads
Section titled “Basic Overloads”// Multiple call signaturesfunction process(input: string): string;function process(input: number): number;function process(input: boolean): boolean;
// Implementation signature (must handle all overloads)function process(input: string | number | boolean): string | number | boolean { if (typeof input === "string") return input.toUpperCase(); if (typeof input === "number") return input * 2; return !input;}Overloads with Different Parameter Counts
Section titled “Overloads with Different Parameter Counts”function createElement(tag: "div"): HTMLDivElement;function createElement(tag: "span"): HTMLSpanElement;function createElement(tag: "input", options: { type: string }): HTMLInputElement;function createElement(tag: string, options?: Record<string, unknown>): Element { const el = document.createElement(tag); if (options) Object.assign(el, options); return el;}Overload Best Practices
Section titled “Overload Best Practices”// Prefer union types when possiblefunction pad(value: string, padding: number | string): string { if (typeof padding === "number") return " ".repeat(padding) + value; return padding + value;}
// Use overloads when return types differ based on input shapefunction getData(url: string): Promise<Response>;function getData<T>(url: string, parser: (data: unknown) => T): Promise<T>;function getData<T>(url: string, parser?: (data: unknown) => T) { return fetch(url).then(res => res.json()).then(data => parser ? parser(data) : data);}Common Mistakes
Section titled “Common Mistakes”| Mistake | Fix |
|---|---|
| Implementation incompatible with overloads | Implementation must handle ALL overload signatures |
| Overloads with too many variations | Use union types or generics instead |
| Missing overload for common case | Always include the most general case |
Interview Questions
Section titled “Interview Questions”Easy: What are function overloads?
Medium: How many overloads can a function have?
Hard: When should you use overloads vs union types?