* Fixes #26122. When `resolveCall` does not resolve in `resolveNewExpression`, the error should only be thrown if there is a *defined* signature that is not-void. * Fix other baselines to remove erroneous TS2350.
This commit is contained in:
parent
a5a26ec939
commit
50f442f9ff
|
@ -19592,7 +19592,7 @@ namespace ts {
|
||||||
const callSignatures = getSignaturesOfType(expressionType, SignatureKind.Call);
|
const callSignatures = getSignaturesOfType(expressionType, SignatureKind.Call);
|
||||||
if (callSignatures.length) {
|
if (callSignatures.length) {
|
||||||
const signature = resolveCall(node, callSignatures, candidatesOutArray, isForSignatureHelp);
|
const signature = resolveCall(node, callSignatures, candidatesOutArray, isForSignatureHelp);
|
||||||
if (!isJavaScriptConstructor(signature.declaration) && getReturnTypeOfSignature(signature) !== voidType) {
|
if (signature.declaration && !isJavaScriptConstructor(signature.declaration) && getReturnTypeOfSignature(signature) !== voidType) {
|
||||||
error(node, Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword);
|
error(node, Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword);
|
||||||
}
|
}
|
||||||
if (getThisTypeOfSignature(signature) === voidType) {
|
if (getThisTypeOfSignature(signature) === voidType) {
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
tests/cases/compiler/callOnInstance.ts(1,18): error TS2300: Duplicate identifier 'D'.
|
tests/cases/compiler/callOnInstance.ts(1,18): error TS2300: Duplicate identifier 'D'.
|
||||||
tests/cases/compiler/callOnInstance.ts(3,15): error TS2300: Duplicate identifier 'D'.
|
tests/cases/compiler/callOnInstance.ts(3,15): error TS2300: Duplicate identifier 'D'.
|
||||||
tests/cases/compiler/callOnInstance.ts(7,19): error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
tests/cases/compiler/callOnInstance.ts(7,19): error TS2554: Expected 0 arguments, but got 1.
|
tests/cases/compiler/callOnInstance.ts(7,19): error TS2554: Expected 0 arguments, but got 1.
|
||||||
tests/cases/compiler/callOnInstance.ts(10,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'C' has no compatible call signatures.
|
tests/cases/compiler/callOnInstance.ts(10,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'C' has no compatible call signatures.
|
||||||
|
|
||||||
|
|
||||||
==== tests/cases/compiler/callOnInstance.ts (5 errors) ====
|
==== tests/cases/compiler/callOnInstance.ts (4 errors) ====
|
||||||
declare function D(): string; // error
|
declare function D(): string; // error
|
||||||
~
|
~
|
||||||
!!! error TS2300: Duplicate identifier 'D'.
|
!!! error TS2300: Duplicate identifier 'D'.
|
||||||
|
@ -18,8 +17,6 @@ tests/cases/compiler/callOnInstance.ts(10,1): error TS2349: Cannot invoke an exp
|
||||||
|
|
||||||
var s2: string = (new D(1))();
|
var s2: string = (new D(1))();
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
!!! error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
~~~~~~~~
|
|
||||||
!!! error TS2554: Expected 0 arguments, but got 1.
|
!!! error TS2554: Expected 0 arguments, but got 1.
|
||||||
|
|
||||||
declare class C { constructor(value: number); }
|
declare class C { constructor(value: number); }
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
tests/cases/compiler/callOverloads1.ts(1,7): error TS2300: Duplicate identifier 'Foo'.
|
tests/cases/compiler/callOverloads1.ts(1,7): error TS2300: Duplicate identifier 'Foo'.
|
||||||
tests/cases/compiler/callOverloads1.ts(9,10): error TS2300: Duplicate identifier 'Foo'.
|
tests/cases/compiler/callOverloads1.ts(9,10): error TS2300: Duplicate identifier 'Foo'.
|
||||||
tests/cases/compiler/callOverloads1.ts(9,10): error TS2391: Function implementation is missing or not immediately following the declaration.
|
tests/cases/compiler/callOverloads1.ts(9,10): error TS2391: Function implementation is missing or not immediately following the declaration.
|
||||||
tests/cases/compiler/callOverloads1.ts(13,10): error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
tests/cases/compiler/callOverloads1.ts(13,10): error TS2554: Expected 0 arguments, but got 1.
|
tests/cases/compiler/callOverloads1.ts(13,10): error TS2554: Expected 0 arguments, but got 1.
|
||||||
|
|
||||||
|
|
||||||
==== tests/cases/compiler/callOverloads1.ts (5 errors) ====
|
==== tests/cases/compiler/callOverloads1.ts (4 errors) ====
|
||||||
class Foo { // error
|
class Foo { // error
|
||||||
~~~
|
~~~
|
||||||
!!! error TS2300: Duplicate identifier 'Foo'.
|
!!! error TS2300: Duplicate identifier 'Foo'.
|
||||||
|
@ -26,8 +25,6 @@ tests/cases/compiler/callOverloads1.ts(13,10): error TS2554: Expected 0 argument
|
||||||
|
|
||||||
var f1 = new Foo("hey");
|
var f1 = new Foo("hey");
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
!!! error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
~~~~~~~~~~~~~~
|
|
||||||
!!! error TS2554: Expected 0 arguments, but got 1.
|
!!! error TS2554: Expected 0 arguments, but got 1.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,10 @@ tests/cases/compiler/callOverloads2.ts(11,10): error TS2389: Function implementa
|
||||||
tests/cases/compiler/callOverloads2.ts(11,10): error TS2393: Duplicate function implementation.
|
tests/cases/compiler/callOverloads2.ts(11,10): error TS2393: Duplicate function implementation.
|
||||||
tests/cases/compiler/callOverloads2.ts(12,10): error TS2393: Duplicate function implementation.
|
tests/cases/compiler/callOverloads2.ts(12,10): error TS2393: Duplicate function implementation.
|
||||||
tests/cases/compiler/callOverloads2.ts(14,10): error TS2391: Function implementation is missing or not immediately following the declaration.
|
tests/cases/compiler/callOverloads2.ts(14,10): error TS2391: Function implementation is missing or not immediately following the declaration.
|
||||||
tests/cases/compiler/callOverloads2.ts(18,10): error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
tests/cases/compiler/callOverloads2.ts(18,10): error TS2554: Expected 0 arguments, but got 1.
|
tests/cases/compiler/callOverloads2.ts(18,10): error TS2554: Expected 0 arguments, but got 1.
|
||||||
|
|
||||||
|
|
||||||
==== tests/cases/compiler/callOverloads2.ts (8 errors) ====
|
==== tests/cases/compiler/callOverloads2.ts (7 errors) ====
|
||||||
class Foo { // error
|
class Foo { // error
|
||||||
~~~
|
~~~
|
||||||
!!! error TS2300: Duplicate identifier 'Foo'.
|
!!! error TS2300: Duplicate identifier 'Foo'.
|
||||||
|
@ -40,8 +39,6 @@ tests/cases/compiler/callOverloads2.ts(18,10): error TS2554: Expected 0 argument
|
||||||
|
|
||||||
var f1 = new Foo("hey");
|
var f1 = new Foo("hey");
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
!!! error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
~~~~~~~~~~~~~~
|
|
||||||
!!! error TS2554: Expected 0 arguments, but got 1.
|
!!! error TS2554: Expected 0 arguments, but got 1.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
tests/cases/conformance/salsa/index.js(22,15): error TS2348: Value of type 'typeof C3' is not callable. Did you mean to include 'new'?
|
tests/cases/conformance/salsa/index.js(22,15): error TS2348: Value of type 'typeof C3' is not callable. Did you mean to include 'new'?
|
||||||
tests/cases/conformance/salsa/index.js(30,15): error TS2348: Value of type 'typeof C4' is not callable. Did you mean to include 'new'?
|
tests/cases/conformance/salsa/index.js(30,15): error TS2348: Value of type 'typeof C4' is not callable. Did you mean to include 'new'?
|
||||||
|
tests/cases/conformance/salsa/index.js(55,13): error TS2554: Expected 1 arguments, but got 0.
|
||||||
|
|
||||||
|
|
||||||
==== tests/cases/conformance/salsa/index.js (2 errors) ====
|
==== tests/cases/conformance/salsa/index.js (3 errors) ====
|
||||||
function C1() {
|
function C1() {
|
||||||
if (!(this instanceof C1)) return new C1();
|
if (!(this instanceof C1)) return new C1();
|
||||||
this.x = 1;
|
this.x = 1;
|
||||||
|
@ -53,4 +54,15 @@ tests/cases/conformance/salsa/index.js(30,15): error TS2348: Value of type 'type
|
||||||
};
|
};
|
||||||
|
|
||||||
var c6_v1 = new C6();
|
var c6_v1 = new C6();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @param {number} num
|
||||||
|
*/
|
||||||
|
function C7(num) {}
|
||||||
|
|
||||||
|
var c7_v1 = new C7();
|
||||||
|
~~~~~~~~
|
||||||
|
!!! error TS2554: Expected 1 arguments, but got 0.
|
||||||
|
|
|
@ -116,3 +116,16 @@ var c6_v1 = new C6();
|
||||||
>c6_v1 : Symbol(c6_v1, Decl(index.js, 45, 3))
|
>c6_v1 : Symbol(c6_v1, Decl(index.js, 45, 3))
|
||||||
>C6 : Symbol(C6, Decl(index.js, 38, 12))
|
>C6 : Symbol(C6, Decl(index.js, 38, 12))
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @param {number} num
|
||||||
|
*/
|
||||||
|
function C7(num) {}
|
||||||
|
>C7 : Symbol(C7, Decl(index.js, 45, 21))
|
||||||
|
>num : Symbol(num, Decl(index.js, 52, 12))
|
||||||
|
|
||||||
|
var c7_v1 = new C7();
|
||||||
|
>c7_v1 : Symbol(c7_v1, Decl(index.js, 54, 3))
|
||||||
|
>C7 : Symbol(C7, Decl(index.js, 45, 21))
|
||||||
|
|
||||||
|
|
|
@ -168,3 +168,17 @@ var c6_v1 = new C6();
|
||||||
>new C6() : C6
|
>new C6() : C6
|
||||||
>C6 : typeof C6
|
>C6 : typeof C6
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @param {number} num
|
||||||
|
*/
|
||||||
|
function C7(num) {}
|
||||||
|
>C7 : typeof C7
|
||||||
|
>num : number
|
||||||
|
|
||||||
|
var c7_v1 = new C7();
|
||||||
|
>c7_v1 : any
|
||||||
|
>new C7() : any
|
||||||
|
>C7 : typeof C7
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(8,15): error TS2558: Expected 0 type arguments, but got 1.
|
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(8,15): error TS2558: Expected 0 type arguments, but got 1.
|
||||||
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(11,9): error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(11,17): error TS2558: Expected 0 type arguments, but got 1.
|
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(11,17): error TS2558: Expected 0 type arguments, but got 1.
|
||||||
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(14,10): error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(14,16): error TS2558: Expected 0 type arguments, but got 1.
|
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(14,16): error TS2558: Expected 0 type arguments, but got 1.
|
||||||
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(18,10): error TS2347: Untyped function calls may not accept type arguments.
|
tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts(18,10): error TS2347: Untyped function calls may not accept type arguments.
|
||||||
|
|
||||||
|
|
||||||
==== tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts (6 errors) ====
|
==== tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGenericTypeWithTypeArguments.ts (4 errors) ====
|
||||||
// it is an error to provide type arguments to a non-generic call
|
// it is an error to provide type arguments to a non-generic call
|
||||||
// all of these are errors
|
// all of these are errors
|
||||||
|
|
||||||
|
@ -20,15 +18,11 @@ tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateNonGen
|
||||||
|
|
||||||
function Foo(): void { }
|
function Foo(): void { }
|
||||||
var r = new Foo<number>();
|
var r = new Foo<number>();
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
!!! error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
~~~~~~
|
~~~~~~
|
||||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||||
|
|
||||||
var f: { (): void };
|
var f: { (): void };
|
||||||
var r2 = new f<number>();
|
var r2 = new f<number>();
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
!!! error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
~~~~~~
|
~~~~~~
|
||||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts(5,11): error TS2558: Expected 0-2 type arguments, but got 3.
|
tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts(5,11): error TS2558: Expected 0-2 type arguments, but got 3.
|
||||||
tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts(6,1): error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts(6,15): error TS2558: Expected 0-2 type arguments, but got 3.
|
tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts(6,15): error TS2558: Expected 0-2 type arguments, but got 3.
|
||||||
tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts(9,1): error TS2554: Expected 1 arguments, but got 0.
|
tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts(9,1): error TS2554: Expected 1 arguments, but got 0.
|
||||||
|
|
||||||
|
|
||||||
==== tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts (4 errors) ====
|
==== tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts (3 errors) ====
|
||||||
declare function Callbacks(flags?: string): void;
|
declare function Callbacks(flags?: string): void;
|
||||||
declare function Callbacks<T>(flags?: string): void;
|
declare function Callbacks<T>(flags?: string): void;
|
||||||
declare function Callbacks<T1, T2>(flags?: string): void;
|
declare function Callbacks<T1, T2>(flags?: string): void;
|
||||||
|
@ -13,8 +12,6 @@ tests/cases/compiler/overloadsAndTypeArgumentArityErrors.ts(9,1): error TS2554:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
!!! error TS2558: Expected 0-2 type arguments, but got 3.
|
!!! error TS2558: Expected 0-2 type arguments, but got 3.
|
||||||
new Callbacks<number, string, boolean>('s'); // wrong number of type arguments
|
new Callbacks<number, string, boolean>('s'); // wrong number of type arguments
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
!!! error TS2350: Only a void function can be called with the 'new' keyword.
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
!!! error TS2558: Expected 0-2 type arguments, but got 3.
|
!!! error TS2558: Expected 0-2 type arguments, but got 3.
|
||||||
|
|
||||||
|
|
|
@ -49,3 +49,12 @@ function C6() {
|
||||||
};
|
};
|
||||||
|
|
||||||
var c6_v1 = new C6();
|
var c6_v1 = new C6();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @param {number} num
|
||||||
|
*/
|
||||||
|
function C7(num) {}
|
||||||
|
|
||||||
|
var c7_v1 = new C7();
|
||||||
|
|
Loading…
Reference in a new issue