type Adder = (a: T, b: T) => T; function makeAdder(): Adder { return (a: T, b: T): T => { return a + b; }; } var i32Adder = makeAdder(); i32Adder(1, 2); var i64Adder = makeAdder(); i64Adder(1, 2); makeAdder()(1, 2);