interface Foo { reject(arg: T): void; } var foo: Foo interface bar { fail(func: (arg: T) => void ): void; fail2(func2: { (arg: T): void; }): void; } var test: bar; test.fail(arg => foo.reject(arg)); test.fail2(arg => foo.reject(arg)); // Error: Supplied parameters do not match any signature of call target