Typescript - Higher order function types

Sean Clark Hess picture Sean Clark Hess · Nov 6, 2012 · Viewed 11.8k times · Source

I'm getting really excited about TypeScript. How do you set the type of a function parameter?

function twoMoreThanYou(calculateANumber: Function):number {
    return calculateANumber(4) + 2;
}

function double(n:number):number {
    return n*2;
}

console.log("TWO MORE", twoMoreThanYou(double))

How can I type calculateANumber better? I'd like to specify that it must be a function that takes a number and returns a number.

Can I then make an "interface" or some shorthand for that type so I can make my higher order function signatures more readable?

Answer

Sean Clark Hess picture Sean Clark Hess · Nov 6, 2012

These both work

interface NumberFunction extends Function {
    (n:number):number;
}

function twoMoreThanYou(calculateANumber: (n:number)=>number):number {
    ...
}

function twoMoreThanYou(calculateANumber: NumberFunction):number {
    ...
}