Skip to content

Commit d5b8656

Browse files
committed
Better typings for Promise.resolve(), like #31117
1 parent 25f609b commit d5b8656

23 files changed

+212
-199
lines changed

src/lib/es2015.promise.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ interface PromiseConstructor {
120120
* @param value A promise.
121121
* @returns A promise whose internal state matches the provided promise.
122122
*/
123-
resolve<T>(value: T | PromiseLike<T>): Promise<T>;
123+
resolve<T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>;
124124

125125
/**
126126
* Creates a new resolved promise .

tests/baselines/reference/asyncArrowFunction11_es5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ class A {
1111
await Promise.resolve();
1212
>await Promise.resolve() : void
1313
>Promise.resolve() : Promise<void>
14-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
14+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
1515
>Promise : PromiseConstructor
16-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
16+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
1717

1818
const obj = { ["a"]: () => this }; // computed property name after `await` triggers case
1919
>obj : { ["a"]: () => this; }

tests/baselines/reference/asyncFunctionReturnType.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,14 @@ async function fGenericIndexedTypeForKProp<TObj extends Obj, K extends keyof TOb
6767
return obj[key];
6868
}
6969

70-
async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K]> {
70+
async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]> {
7171
return Promise.resolve(obj[key]);
7272
}
7373

74-
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K]> {
74+
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]> {
7575
return Promise.resolve<TObj[K]>(obj[key]);
76-
}
76+
}
77+
7778

7879
//// [asyncFunctionReturnType.js]
7980
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

tests/baselines/reference/asyncFunctionReturnType.symbols

+13-2
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ async function fGenericIndexedTypeForKProp<TObj extends Obj, K extends keyof TOb
240240
>key : Symbol(key, Decl(asyncFunctionReturnType.ts, 64, 93))
241241
}
242242

243-
async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K]> {
243+
async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]> {
244244
>fGenericIndexedTypeForPromiseOfKProp : Symbol(fGenericIndexedTypeForPromiseOfKProp, Decl(asyncFunctionReturnType.ts, 66, 1))
245245
>TObj : Symbol(TObj, Decl(asyncFunctionReturnType.ts, 68, 52))
246246
>Obj : Symbol(Obj, Decl(asyncFunctionReturnType.ts, 8, 1))
@@ -252,6 +252,11 @@ async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends
252252
>K : Symbol(K, Decl(asyncFunctionReturnType.ts, 68, 69))
253253
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
254254
>TObj : Symbol(TObj, Decl(asyncFunctionReturnType.ts, 68, 52))
255+
>K : Symbol(K, Decl(asyncFunctionReturnType.ts, 68, 69))
256+
>PromiseLike : Symbol(PromiseLike, Decl(lib.es5.d.ts, --, --))
257+
>U : Symbol(U, Decl(asyncFunctionReturnType.ts, 68, 153))
258+
>U : Symbol(U, Decl(asyncFunctionReturnType.ts, 68, 153))
259+
>TObj : Symbol(TObj, Decl(asyncFunctionReturnType.ts, 68, 52))
255260
>K : Symbol(K, Decl(asyncFunctionReturnType.ts, 68, 69))
256261

257262
return Promise.resolve(obj[key]);
@@ -262,7 +267,7 @@ async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends
262267
>key : Symbol(key, Decl(asyncFunctionReturnType.ts, 68, 102))
263268
}
264269

265-
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K]> {
270+
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]> {
266271
>fGenericIndexedTypeForExplicitPromiseOfKProp : Symbol(fGenericIndexedTypeForExplicitPromiseOfKProp, Decl(asyncFunctionReturnType.ts, 70, 1))
267272
>TObj : Symbol(TObj, Decl(asyncFunctionReturnType.ts, 72, 60))
268273
>Obj : Symbol(Obj, Decl(asyncFunctionReturnType.ts, 8, 1))
@@ -274,6 +279,11 @@ async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K
274279
>K : Symbol(K, Decl(asyncFunctionReturnType.ts, 72, 77))
275280
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
276281
>TObj : Symbol(TObj, Decl(asyncFunctionReturnType.ts, 72, 60))
282+
>K : Symbol(K, Decl(asyncFunctionReturnType.ts, 72, 77))
283+
>PromiseLike : Symbol(PromiseLike, Decl(lib.es5.d.ts, --, --))
284+
>U : Symbol(U, Decl(asyncFunctionReturnType.ts, 72, 161))
285+
>U : Symbol(U, Decl(asyncFunctionReturnType.ts, 72, 161))
286+
>TObj : Symbol(TObj, Decl(asyncFunctionReturnType.ts, 72, 60))
277287
>K : Symbol(K, Decl(asyncFunctionReturnType.ts, 72, 77))
278288

279289
return Promise.resolve<TObj[K]>(obj[key]);
@@ -285,3 +295,4 @@ async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K
285295
>obj : Symbol(obj, Decl(asyncFunctionReturnType.ts, 72, 100))
286296
>key : Symbol(key, Decl(asyncFunctionReturnType.ts, 72, 110))
287297
}
298+

tests/baselines/reference/asyncFunctionReturnType.types

+29-28
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ async function fIndexedTypeForPromiseOfStringProp(obj: Obj): Promise<Obj["string
4444

4545
return Promise.resolve(obj.stringProp);
4646
>Promise.resolve(obj.stringProp) : Promise<string>
47-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
47+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
4848
>Promise : PromiseConstructor
49-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
49+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
5050
>obj.stringProp : string
5151
>obj : Obj
5252
>stringProp : string
@@ -58,9 +58,9 @@ async function fIndexedTypeForExplicitPromiseOfStringProp(obj: Obj): Promise<Obj
5858

5959
return Promise.resolve<Obj["stringProp"]>(obj.stringProp);
6060
>Promise.resolve<Obj["stringProp"]>(obj.stringProp) : Promise<string>
61-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
61+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
6262
>Promise : PromiseConstructor
63-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
63+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
6464
>obj.stringProp : string
6565
>obj : Obj
6666
>stringProp : string
@@ -82,9 +82,9 @@ async function fIndexedTypeForPromiseOfAnyProp(obj: Obj): Promise<Obj["anyProp"]
8282

8383
return Promise.resolve(obj.anyProp);
8484
>Promise.resolve(obj.anyProp) : Promise<any>
85-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
85+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
8686
>Promise : PromiseConstructor
87-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
87+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
8888
>obj.anyProp : any
8989
>obj : Obj
9090
>anyProp : any
@@ -96,9 +96,9 @@ async function fIndexedTypeForExplicitPromiseOfAnyProp(obj: Obj): Promise<Obj["a
9696

9797
return Promise.resolve<Obj["anyProp"]>(obj.anyProp);
9898
>Promise.resolve<Obj["anyProp"]>(obj.anyProp) : Promise<any>
99-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
99+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
100100
>Promise : PromiseConstructor
101-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
101+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
102102
>obj.anyProp : any
103103
>obj : Obj
104104
>anyProp : any
@@ -120,9 +120,9 @@ async function fGenericIndexedTypeForPromiseOfStringProp<TObj extends Obj>(obj:
120120

121121
return Promise.resolve(obj.stringProp);
122122
>Promise.resolve(obj.stringProp) : Promise<string>
123-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
123+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
124124
>Promise : PromiseConstructor
125-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
125+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
126126
>obj.stringProp : string
127127
>obj : TObj
128128
>stringProp : string
@@ -133,10 +133,10 @@ async function fGenericIndexedTypeForExplicitPromiseOfStringProp<TObj extends Ob
133133
>obj : TObj
134134

135135
return Promise.resolve<TObj["stringProp"]>(obj.stringProp);
136-
>Promise.resolve<TObj["stringProp"]>(obj.stringProp) : Promise<TObj["stringProp"]>
137-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
136+
>Promise.resolve<TObj["stringProp"]>(obj.stringProp) : Promise<TObj["stringProp"] extends PromiseLike<infer U> ? U : TObj["stringProp"]>
137+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
138138
>Promise : PromiseConstructor
139-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
139+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
140140
>obj.stringProp : string
141141
>obj : TObj
142142
>stringProp : string
@@ -158,9 +158,9 @@ async function fGenericIndexedTypeForPromiseOfAnyProp<TObj extends Obj>(obj: TOb
158158

159159
return Promise.resolve(obj.anyProp);
160160
>Promise.resolve(obj.anyProp) : Promise<any>
161-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
161+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
162162
>Promise : PromiseConstructor
163-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
163+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
164164
>obj.anyProp : any
165165
>obj : TObj
166166
>anyProp : any
@@ -171,10 +171,10 @@ async function fGenericIndexedTypeForExplicitPromiseOfAnyProp<TObj extends Obj>(
171171
>obj : TObj
172172

173173
return Promise.resolve<TObj["anyProp"]>(obj.anyProp);
174-
>Promise.resolve<TObj["anyProp"]>(obj.anyProp) : Promise<TObj["anyProp"]>
175-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
174+
>Promise.resolve<TObj["anyProp"]>(obj.anyProp) : Promise<TObj["anyProp"] extends PromiseLike<infer U> ? U : TObj["anyProp"]>
175+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
176176
>Promise : PromiseConstructor
177-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
177+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
178178
>obj.anyProp : any
179179
>obj : TObj
180180
>anyProp : any
@@ -191,32 +191,33 @@ async function fGenericIndexedTypeForKProp<TObj extends Obj, K extends keyof TOb
191191
>key : K
192192
}
193193

194-
async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K]> {
195-
>fGenericIndexedTypeForPromiseOfKProp : <TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K) => Promise<TObj[K]>
194+
async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]> {
195+
>fGenericIndexedTypeForPromiseOfKProp : <TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K) => Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]>
196196
>obj : TObj
197197
>key : K
198198

199199
return Promise.resolve(obj[key]);
200-
>Promise.resolve(obj[key]) : Promise<TObj[K]>
201-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
200+
>Promise.resolve(obj[key]) : Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]>
201+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
202202
>Promise : PromiseConstructor
203-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
203+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
204204
>obj[key] : TObj[K]
205205
>obj : TObj
206206
>key : K
207207
}
208208

209-
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K]> {
210-
>fGenericIndexedTypeForExplicitPromiseOfKProp : <TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K) => Promise<TObj[K]>
209+
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]> {
210+
>fGenericIndexedTypeForExplicitPromiseOfKProp : <TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K) => Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]>
211211
>obj : TObj
212212
>key : K
213213

214214
return Promise.resolve<TObj[K]>(obj[key]);
215-
>Promise.resolve<TObj[K]>(obj[key]) : Promise<TObj[K]>
216-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
215+
>Promise.resolve<TObj[K]>(obj[key]) : Promise<TObj[K] extends PromiseLike<infer U> ? U : TObj[K]>
216+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
217217
>Promise : PromiseConstructor
218-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
218+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
219219
>obj[key] : TObj[K]
220220
>obj : TObj
221221
>key : K
222222
}
223+

tests/baselines/reference/exportDefaultAsyncFunction2.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ export default async(() => await(Promise.resolve(1)));
1919
>await(Promise.resolve(1)) : any
2020
>await : (...args: any[]) => any
2121
>Promise.resolve(1) : Promise<number>
22-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
22+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
2323
>Promise : PromiseConstructor
24-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
24+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
2525
>1 : 1
2626

2727
=== tests/cases/compiler/b.ts ===

tests/baselines/reference/genericFunctionInference1.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -835,9 +835,9 @@ const fn30: Fn = pipe(
835835
const promise = Promise.resolve(1);
836836
>promise : Promise<number>
837837
>Promise.resolve(1) : Promise<number>
838-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
838+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
839839
>Promise : PromiseConstructor
840-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
840+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
841841
>1 : 1
842842

843843
promise.then(

tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ function truePromise(): Promise<true> {
77

88
return Promise.resolve(true);
99
>Promise.resolve(true) : Promise<true>
10-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
10+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
1111
>Promise : PromiseConstructor
12-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
12+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
1313
>true : true
1414
}
1515

tests/baselines/reference/instantiateContextualTypes.types

+6-6
Original file line numberDiff line numberDiff line change
@@ -342,9 +342,9 @@ class Interesting {
342342
>Promise.resolve().then(() => { if (1 < 2) { return 'SOMETHING'; } return 'ELSE'; }) : Promise<DooDad>
343343
>Promise.resolve().then : <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => Promise<TResult1 | TResult2>
344344
>Promise.resolve() : Promise<void>
345-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
345+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
346346
>Promise : PromiseConstructor
347-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
347+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
348348
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => Promise<TResult1 | TResult2>
349349
>() => { if (1 < 2) { return 'SOMETHING'; } return 'ELSE'; } : () => "SOMETHING" | "ELSE"
350350

@@ -369,9 +369,9 @@ class Interesting {
369369
>Promise.resolve().then(() => { return 'ELSE'; }) : Promise<DooDad>
370370
>Promise.resolve().then : <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => Promise<TResult1 | TResult2>
371371
>Promise.resolve() : Promise<void>
372-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
372+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
373373
>Promise : PromiseConstructor
374-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
374+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
375375
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => Promise<TResult1 | TResult2>
376376
>() => { return 'ELSE'; } : () => "ELSE"
377377

@@ -388,9 +388,9 @@ class Interesting {
388388
>Promise.resolve().then(() => { if (1 < 2) { return 'SOMETHING'; } return 'SOMETHING'; }) : Promise<DooDad>
389389
>Promise.resolve().then : <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => Promise<TResult1 | TResult2>
390390
>Promise.resolve() : Promise<void>
391-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
391+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
392392
>Promise : PromiseConstructor
393-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
393+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
394394
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => Promise<TResult1 | TResult2>
395395
>() => { if (1 < 2) { return 'SOMETHING'; } return 'SOMETHING'; } : () => "SOMETHING"
396396

tests/baselines/reference/jsdocArrayObjectPromiseImplicitAny.types

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,18 @@ function returnAnyArray(arr) {
2727
var anyPromise = Promise.resolve(5);
2828
>anyPromise : Promise<any>
2929
>Promise.resolve(5) : Promise<number>
30-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
30+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
3131
>Promise : PromiseConstructor
32-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
32+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
3333
>5 : 5
3434

3535
/** @type {Promise<number>} */
3636
var numberPromise = Promise.resolve(5);
3737
>numberPromise : Promise<number>
3838
>Promise.resolve(5) : Promise<number>
39-
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
39+
>Promise.resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
4040
>Promise : PromiseConstructor
41-
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
41+
>resolve : { <T>(value: T): Promise<T extends PromiseLike<infer U> ? U : T>; (): Promise<void>; }
4242
>5 : 5
4343

4444
/**

0 commit comments

Comments
 (0)