Skip to content

Functions

//`: number` specifies this function returns a number
function getTime(): number {
  return new Date().getTime();
}
function printMessage(): void {
  console.log("Hello World!");
  // no return statement needed
}

Function parameters can be typed, but they can also be inferred

function add(a: number, b: number) {
  // typed parameters
  return a + b;
}
// the `?` marks parameter `z` as optional
function multiply(x: number, y: number, z?: number) {
  return x * y * (z || 1);
}
console.log(multiply(3, 6)); // 18 since we didn't pass a `z`
console.log(multiply(3, 6, 2)); // 36 since we passed a `z`
function pow(value: number, exponent: number = 4) {
  return value ** exponent;
}

The type can also be inferred from the default value

Same as typing regular parameters, but with an object

function divide({ dividend, divisor }: { dividend: number; divisor: number }) {
  return dividend / divisor;
}

Collect any number of arguments into an array:

function sum(...numbers: number[]): number {
  return numbers.reduce((total, n) => total + n, 0);
}

console.log(sum(1, 2, 3)); // 6
console.log(sum(10, 20, 30, 40)); // 100
type Aliased = (value: number) => number;

// For this function, parameter `value` is automatically assigned
// type `number` from type `Aliased`
const aliasedFunction: Aliased = (value) => value \* -1;