Functions & Parameters

Functions are the primary build blocks in TypeScript. Type annotations ensure parameter values and return values strictly conform to expected contracts.

1. Function Annotations & Return Types

// Named Function with Return Type Annotation
function calculateTotal(price: number, tax: number): number {
  return price + (price * tax);
}

// Arrow Function Signature
const multiply = (x: number, y: number): number => x * y;

2. Optional & Default Parameters

Optional parameters must be placed after required parameters:

// Optional Parameter (greeting?)
function greetUser(name: string, greeting?: string): string {
  if (greeting) {
    return `${greeting}, ${name}!`;
  }
  return `Hello, ${name}!`;
}

// Default Parameter (role = "Guest")
function createUser(username: string, role: string = "Guest") {
  return { username, role };
}

3. Rest Parameters (`...args`)

function sumNumbers(...numbers: number[]): number {
  return numbers.reduce((acc, curr) => acc + curr, 0);
}

console.log(sumNumbers(10, 20, 30, 40)); // Output: 100

4. Function Overloading

Function overloading allows a single function to handle different parameter types and return corresponding types:

// 1. Overload Signatures
function combine(a: string, b: string): string;
function combine(a: number, b: number): number;

// 2. Implementation Signature
function combine(a: any, b: any): any {
  return a + b;
}

const strResult = combine("Hello ", "World"); // Returns string
const numResult = combine(50, 100);          // Returns number

Next Up

Learn Union & Intersection types, discriminated unions, and exhaustiveness checking.

Next Lesson: Union & Intersection Types →