// You should be able to call objects with call properties function a(f: { (): string }, g: { (x: number): string } ): string { return f() + g(123); } // ...and get an error if the return type is wrong function b(f: { (): string }): number { return f(); } // ...or if the param type is wrong function c(f: { (x: number): number }): number { return f("hello"); } // ...or if the arity is wrong function d(f: { (x: number): number }): number { return f(); } // ...or if there is no call property function e(f: {}): number { return f(); } // Make sure we complain even if the object literal is unsealed. function f(): number { var x = {}; return x(); }