==== tests/cases/conformance/expressions/functionCalls/typeArgumentInferenceConstructSignatures.ts (8 errors) ==== // Generic call with no parameters interface NoParams { new (); } var noParams: NoParams; new noParams(); new noParams(); new noParams<{}>(); // Generic call with parameters but none use type parameter type interface noGenericParams { new (n: string); } var noGenericParams: noGenericParams; new noGenericParams(''); new noGenericParams(''); new noGenericParams<{}>(''); // Generic call with multiple type parameters and only one used in parameter type annotation interface someGenerics1 { new (n: T, m: number); } var someGenerics1: someGenerics1; new someGenerics1(3, 4); new someGenerics1(3, 4); // Error ~ !!! Argument of type 'number' is not assignable to parameter of type 'string'. new someGenerics1(3, 4); // Generic call with argument of function type whose parameter is of type parameter type interface someGenerics2a { new (n: (x: T) => void); } var someGenerics2a: someGenerics2a; new someGenerics2a((n: string) => n); new someGenerics2a((n: string) => n); new someGenerics2a((n) => n.substr(0)); interface someGenerics2b { new (n: (x: T, y: U) => void); } var someGenerics2b: someGenerics2b; new someGenerics2b((n: string, x: number) => n); new someGenerics2b((n: string, t: number) => n); new 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 interface someGenerics3 { new (producer: () => T); } var someGenerics3: someGenerics3; new someGenerics3(() => ''); new someGenerics3(() => undefined); ~~~~~~ !!! Cannot find name 'Window'. new 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 interface someGenerics4 { new (n: T, f: (x: U) => void); } var someGenerics4: someGenerics4; new someGenerics4(4, () => null); new someGenerics4('', () => 3); new someGenerics4('', (x: string) => ''); // Error ~~~~~~~~~~~~~~~~~ !!! Argument of type '(x: string) => string' is not assignable to parameter of type '(x: number) => void'. new 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 interface someGenerics5 { new (n: T, f: (x: U) => void); } var someGenerics5: someGenerics5; new someGenerics5(4, () => null); new someGenerics5('', () => 3); new someGenerics5('', (x: string) => ''); // Error ~~~~~~~~~~~~~~~~~ !!! Argument of type '(x: string) => string' is not assignable to parameter of type '(x: number) => void'. new someGenerics5(null, null); // Generic call with multiple arguments of function types that each have parameters of the same generic type interface someGenerics6 { new (a: (a: A) => A, b: (b: A) => A, c: (c: A) => A); } var someGenerics6: someGenerics6; new someGenerics6(n => n, n => n, n => n); new someGenerics6(n => n, n => n, n => n); new someGenerics6((n: number) => n, (n: string) => n, (n: number) => n); // Error ~~~~~~~~~~~~~~~~ !!! Argument of type '(n: string) => string' is not assignable to parameter of type '(b: number) => number'. new 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 interface someGenerics7 { new (a: (a: A) => A, b: (b: B) => B, c: (c: C) => C); } var someGenerics7: someGenerics7; new someGenerics7(n => n, n => n, n => n); new someGenerics7(n => n, n => n, n => n); new someGenerics7((n: number) => n, (n: string) => n, (n: number) => n); // Generic call with argument of generic function type interface someGenerics8 { new (n: T): T; } var someGenerics8: someGenerics8; var x = new someGenerics8(someGenerics7); new x(null, null, null); // Generic call with multiple parameters of generic type passed arguments with no best common type interface someGenerics9 { new (a: T, b: T, c: T): T; } var someGenerics9: someGenerics9; var a9a = new someGenerics9('', 0, []); var a9a: {}; var a9b = new 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?: Window; ~~~~~~ !!! Cannot find name 'Window'. } var a9e = new someGenerics9(undefined, { x: 6, z: window }, { x: 6, y: '' }); ~~~~~~ !!! Cannot find name 'window'. var a9e: {}; var a9f = new someGenerics9(undefined, { x: 6, z: window }, { x: 6, y: '' }); ~~~~~~ !!! Cannot find name 'window'. var a9f: A92; // Generic call with multiple parameters of generic type passed arguments with a single best common type var a9d = new 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 = new 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 = new someGenerics9([], null, undefined); var arr: any[];