Skip to content

Commit d89aac4

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

7 files changed

+17
-8
lines changed

src/compiler/checker.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -30266,9 +30266,14 @@ 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;
30275+
//: (file.scriptKind === ScriptKind.JS || file.scriptKind === ScriptKind.JSX) && parameterRange === 1 && args.length === 0 && isPromiseResolveArityError(node)
30276+
// ? Diagnostics.Expected_0_arguments_but_got_1_TypeScript_may_need_a_JSDoc_hint_that_the_call_to_new_Promise_produces_a_Promise_void
3027230277
if (min < args.length && args.length < max) {
3027330278
// between min and max, but with no matching overload
3027430279
return getDiagnosticForCallNode(node, Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, args.length, maxBelow, minAbove);

src/compiler/diagnosticMessages.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -3305,8 +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>'": {
3309-
"category": "Error",
3308+
"Expected {0} arguments, but got {1}. Did you forget to include 'void' in your type argument to 'Promise'?": { "category": "Error",
33103309
"code": 2794
33113310
},
33123311
"The 'intrinsic' keyword can only be used to declare compiler provided intrinsic types.": {
@@ -3365,6 +3364,10 @@
33653364
"category": "Error",
33663365
"code": 2809
33673366
},
3367+
"Expected {0} arguments, but got {1}. TypeScript may need a JSDoc hint that the call to 'new Promise()' produces a 'Promise<void>'": {
3368+
"category": "Error",
3369+
"code": 2810
3370+
},
33683371
"Initializer for property '{0}'": {
33693372
"category": "Error",
33703373
"code": 2811

src/services/codefixes/fixAddVoidToPromise.ts

+2-1
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

+1-1
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

+1-1
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

+1-1
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

+1-1
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)