//`: 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;