tests/cases/conformance/expressions/functionCalls/typeArgumentInference.ts(68,11): error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate 'string' is not a valid type argument because it is not a supertype of candidate 'number'. tests/cases/conformance/expressions/functionCalls/typeArgumentInference.ts(82,11): error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate '{ x: number; z: Date; }' is not a valid type argument because it is not a supertype of candidate '{ x: number; y: string; }'. Property 'z' is missing in type '{ x: number; y: string; }'. ==== tests/cases/conformance/expressions/functionCalls/typeArgumentInference.ts (2 errors) ==== // Generic call with no parameters function noParams() { } noParams(); noParams(); noParams<{}>(); // Generic call with parameters but none use type parameter type function noGenericParams(n: string) { } noGenericParams(''); noGenericParams(''); noGenericParams<{}>(''); // Generic call with multiple type parameters and only one used in parameter type annotation function someGenerics1(n: T, m: number) { } someGenerics1(3, 4); someGenerics1(3, 4); // Generic call with argument of function type whose parameter is of type parameter type function someGenerics2a(n: (x: T) => void) { } someGenerics2a((n: string) => n); someGenerics2a((n: string) => n); someGenerics2a((n) => n.substr(0)); function someGenerics2b(n: (x: T, y: U) => void) { } someGenerics2b((n: string, x: number) => n); someGenerics2b((n: string, t: number) => n); someGenerics2b((n, t) => n.substr(t * t)); // Generic call with argument of function type whose parameter is not of type parameter type but body/return type uses type parameter function someGenerics3(producer: () => T) { } someGenerics3(() => ''); someGenerics3(() => undefined); someGenerics3(() => 3); // 2 parameter generic call with argument 1 of type parameter type and argument 2 of function type whose parameter is of type parameter type function someGenerics4(n: T, f: (x: U) => void) { } someGenerics4(4, () => null); someGenerics4('', () => 3); someGenerics4(null, null); // 2 parameter generic call with argument 2 of type parameter type and argument 1 of function type whose parameter is of type parameter type function someGenerics5(n: T, f: (x: U) => void) { } someGenerics5(4, () => null); someGenerics5('', () => 3); someGenerics5(null, null); // Generic call with multiple arguments of function types that each have parameters of the same generic type function someGenerics6(a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) { } someGenerics6(n => n, n => n, n => n); someGenerics6(n => n, n => n, n => n); someGenerics6((n: number) => n, (n: number) => n, (n: number) => n); // Generic call with multiple arguments of function types that each have parameters of different generic type function someGenerics7(a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) { } someGenerics7(n => n, n => n, n => n); someGenerics7(n => n, n => n, n => n); someGenerics7((n: number) => n, (n: string) => n, (n: number) => n); // Generic call with argument of generic function type function someGenerics8(n: T): T { return n; } var x = someGenerics8(someGenerics7); x(null, null, null); // Generic call with multiple parameters of generic type passed arguments with no best common type function someGenerics9(a: T, b: T, c: T): T { return null; } var a9a = someGenerics9('', 0, []); ~~~~~~~~~~~~~ !!! error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. !!! error TS2453: Type argument candidate 'string' is not a valid type argument because it is not a supertype of candidate 'number'. var a9a: {}; var a9b = someGenerics9<{ a?: number; b?: string; }>({ a: 0 }, { b: '' }, null); var a9b: { a?: number; b?: string; }; // Generic call with multiple parameters of generic type passed arguments with multiple best common types interface A91 { x: number; y?: string; } interface A92 { x: number; z?: Date; } var a9e = someGenerics9(undefined, { x: 6, z: new Date() }, { x: 6, y: '' }); ~~~~~~~~~~~~~ !!! error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. !!! error TS2453: Type argument candidate '{ x: number; z: Date; }' is not a valid type argument because it is not a supertype of candidate '{ x: number; y: string; }'. !!! error TS2453: Property 'z' is missing in type '{ x: number; y: string; }'. var a9e: {}; var a9f = someGenerics9(undefined, { x: 6, z: new Date() }, { x: 6, y: '' }); var a9f: A92; // Generic call with multiple parameters of generic type passed arguments with a single best common type var a9d = someGenerics9({ x: 3 }, { x: 6 }, { x: 6 }); var a9d: { x: number; }; // Generic call with multiple parameters of generic type where one argument is of type 'any' var anyVar: any; var a = someGenerics9(7, anyVar, 4); var a: any; // Generic call with multiple parameters of generic type where one argument is [] and the other is not 'any' var arr = someGenerics9([], null, undefined); var arr: any[];