forked from microsoft/TypeScript
/
correctOrderOfPromiseMethod.types
74 lines (60 loc) · 2.2 KB
/
correctOrderOfPromiseMethod.types
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
=== tests/cases/compiler/correctOrderOfPromiseMethod.ts ===
interface A {
id: string
>id : string
}
interface B {
id: string
>id : string
fieldB: string
>fieldB : string
}
async function countEverything(): Promise<number> {
>countEverything : () => Promise<number>
const providerA = async (): Promise<A[]> => { return [] }
>providerA : () => Promise<A[]>
>async (): Promise<A[]> => { return [] } : () => Promise<A[]>
>[] : undefined[]
const providerB = async (): Promise<B[]> => { return [] }
>providerB : () => Promise<B[]>
>async (): Promise<B[]> => { return [] } : () => Promise<B[]>
>[] : undefined[]
const [resultA, resultB] = await Promise.all([
>resultA : A[]
>resultB : B[]
>await Promise.all([ providerA(), providerB(), ] as const) : [A[], B[]]
>Promise.all([ providerA(), providerB(), ] as const) : Promise<[A[], B[]]>
>Promise.all : { <TAll>(values: Iterable<TAll>): Promise<(TAll extends undefined ? TAll : TAll extends PromiseLike<infer UAll> ? UAll : TAll)[]>; <T extends readonly any[]>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]>; }>; }
>Promise : PromiseConstructor
>all : { <TAll>(values: Iterable<TAll>): Promise<(TAll extends undefined ? TAll : TAll extends PromiseLike<infer UAll> ? UAll : TAll)[]>; <T extends readonly any[]>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]>; }>; }
>[ providerA(), providerB(), ] as const : readonly [Promise<A[]>, Promise<B[]>]
>[ providerA(), providerB(), ] : readonly [Promise<A[]>, Promise<B[]>]
providerA(),
>providerA() : Promise<A[]>
>providerA : () => Promise<A[]>
providerB(),
>providerB() : Promise<B[]>
>providerB : () => Promise<B[]>
] as const);
const dataA: A[] = resultA;
>dataA : A[]
>resultA : A[]
const dataB: B[] = resultB;
>dataB : B[]
>resultB : B[]
if (dataA && dataB) {
>dataA && dataB : B[]
>dataA : A[]
>dataB : B[]
return dataA.length + dataB.length;
>dataA.length + dataB.length : number
>dataA.length : number
>dataA : A[]
>length : number
>dataB.length : number
>dataB : B[]
>length : number
}
return 0;
>0 : 0
}