=== tests/cases/compiler/typeLiteralCallback.ts === interface Foo { >Foo : Foo >T : T reject(arg: T): void ; >reject : (arg: T) => void >arg : T >T : T } var foo: Foo >foo : Foo >Foo : Foo interface bar { >bar : bar >T : T fail(func: (arg: T) => void ): void ; >fail : (func: (arg: T) => void) => void >func : (arg: T) => void >arg : T >T : T fail2(func: { (arg: T): void ; }): void ; >fail2 : (func: (arg: T) => void) => void >func : (arg: T) => void >arg : T >T : T } var test: bar; >test : bar >bar : bar test.fail(arg => foo.reject(arg)); >test.fail(arg => foo.reject(arg)) : void >test.fail : (func: (arg: string) => void) => void >test : bar >fail : (func: (arg: string) => void) => void >arg => foo.reject(arg) : (arg: string) => void >arg : string >foo.reject(arg) : void >foo.reject : (arg: string) => void >foo : Foo >reject : (arg: string) => void >arg : string test.fail2(arg => foo.reject(arg)); // Should be OK. Was: Error: Supplied parameters do not match any signature of call target >test.fail2(arg => foo.reject(arg)) : void >test.fail2 : (func: (arg: string) => void) => void >test : bar >fail2 : (func: (arg: string) => void) => void >arg => foo.reject(arg) : (arg: string) => void >arg : string >foo.reject(arg) : void >foo.reject : (arg: string) => void >foo : Foo >reject : (arg: string) => void >arg : string