Skip to content

Commit ad2e50e

Browse files
committed
fix(46570): Unhelpful Promise type argument hint in JS file
1 parent 8bda03d commit ad2e50e

7 files changed

+15
-7
lines changed

src/compiler/checker.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30266,8 +30266,11 @@ namespace ts {
3026630266
const parameterRange = hasRestParameter ? min
3026730267
: min < max ? min + "-" + max
3026830268
: min;
30269+
const file = getSourceFileOfNode(node);
3026930270
const error = hasRestParameter ? Diagnostics.Expected_at_least_0_arguments_but_got_1
30270-
: parameterRange === 1 && args.length === 0 && isPromiseResolveArityError(node) ? Diagnostics.Expected_0_arguments_but_got_1_TypeScript_may_need_a_JSDoc_hint_that_the_call_to_new_Promise_produces_a_Promise_void
30271+
: parameterRange === 1 && args.length === 0 && isPromiseResolveArityError(node) ? (file.scriptKind === ScriptKind.JS || file.scriptKind === ScriptKind.JSX)
30272+
? Diagnostics.Expected_0_arguments_but_got_1_TypeScript_may_need_a_JSDoc_hint_that_the_call_to_new_Promise_produces_a_Promise_void
30273+
: Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise
3027130274
: Diagnostics.Expected_0_arguments_but_got_1;
3027230275
if (min < args.length && args.length < max) {
3027330276
// between min and max, but with no matching overload

src/compiler/diagnosticMessages.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3305,7 +3305,7 @@
33053305
"category": "Error",
33063306
"code": 2793
33073307
},
3308-
"Expected {0} arguments, but got {1}. TypeScript may need a JSDoc hint that the call to 'new Promise()' produces a 'Promise<void>'": {
3308+
"Expected {0} arguments, but got {1}. Did you forget to include 'void' in your type argument to 'Promise'?": {
33093309
"category": "Error",
33103310
"code": 2794
33113311
},
@@ -3365,6 +3365,10 @@
33653365
"category": "Error",
33663366
"code": 2809
33673367
},
3368+
"Expected {0} arguments, but got {1}. TypeScript may need a JSDoc hint that the call to 'new Promise()' produces a 'Promise<void>'": {
3369+
"category": "Error",
3370+
"code": 2810
3371+
},
33683372
"Initializer for property '{0}'": {
33693373
"category": "Error",
33703374
"code": 2811

src/services/codefixes/fixAddVoidToPromise.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ namespace ts.codefix {
33
const fixName = "addVoidToPromise";
44
const fixId = "addVoidToPromise";
55
const errorCodes = [
6-
Diagnostics.Expected_0_arguments_but_got_1_TypeScript_may_need_a_JSDoc_hint_that_the_call_to_new_Promise_produces_a_Promise_void.code
6+
Diagnostics.Expected_0_arguments_but_got_1_TypeScript_may_need_a_JSDoc_hint_that_the_call_to_new_Promise_produces_a_Promise_void.code,
7+
Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise.code
78
];
89
registerCodeFix({
910
errorCodes,

tests/cases/fourslash/codeFixAddVoidToPromiseJS.1.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
////const p1 = new Promise(resolve => resolve());
1010

1111
verify.codeFix({
12-
errorCode: 2794,
12+
errorCode: 2810,
1313
description: "Add 'void' to Promise resolved without a value",
1414
index: 2,
1515
newFileContent: `const p1 = /** @type {Promise<void>} */(new Promise(resolve => resolve()));`

tests/cases/fourslash/codeFixAddVoidToPromiseJS.2.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
////const p2 = /** @type {Promise<number>} */(new Promise(resolve => resolve()));
1010

1111
verify.codeFix({
12-
errorCode: 2794,
12+
errorCode: 2810,
1313
description: "Add 'void' to Promise resolved without a value",
1414
index: 2,
1515
newFileContent: `const p2 = /** @type {Promise<number | void>} */(new Promise(resolve => resolve()));`

tests/cases/fourslash/codeFixAddVoidToPromiseJS.3.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
////const p3 = /** @type {Promise<number | string>} */(new Promise(resolve => resolve()));
1010

1111
verify.codeFix({
12-
errorCode: 2794,
12+
errorCode: 2810,
1313
description: "Add 'void' to Promise resolved without a value",
1414
index: 2,
1515
newFileContent: `const p3 = /** @type {Promise<number | string | void>} */(new Promise(resolve => resolve()));`

tests/cases/fourslash/codeFixAddVoidToPromiseJS.4.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
////const p4 = /** @type {Promise<{ x: number } & { y: string }>} */(new Promise(resolve => resolve()));
1010

1111
verify.codeFix({
12-
errorCode: 2794,
12+
errorCode: 2810,
1313
description: "Add 'void' to Promise resolved without a value",
1414
index: 2,
1515
newFileContent: `const p4 = /** @type {Promise<({ x: number } & { y: string }) | void>} */(new Promise(resolve => resolve()));`

0 commit comments

Comments
 (0)