|
| 1 | +=== tests/cases/compiler/correctOrderOfPromiseMethod.ts === |
| 2 | +interface A { |
| 3 | +>A : A |
| 4 | + |
| 5 | + id: string |
| 6 | +>id : string |
| 7 | +} |
| 8 | + |
| 9 | +interface B { |
| 10 | +>B : B |
| 11 | + |
| 12 | + id: string |
| 13 | +>id : string |
| 14 | + |
| 15 | + fieldB: string |
| 16 | +>fieldB : string |
| 17 | +} |
| 18 | + |
| 19 | +async function countEverything(): Promise<number> { |
| 20 | +>countEverything : () => Promise<number> |
| 21 | +>Promise : Promise<T> |
| 22 | + |
| 23 | + const providerA = async (): Promise<A[]> => { return [] } |
| 24 | +>providerA : () => Promise<A[]> |
| 25 | +>async (): Promise<A[]> => { return [] } : () => Promise<A[]> |
| 26 | +>Promise : Promise<T> |
| 27 | +>A : A |
| 28 | +>[] : undefined[] |
| 29 | + |
| 30 | + const providerB = async (): Promise<B[]> => { return [] } |
| 31 | +>providerB : () => Promise<B[]> |
| 32 | +>async (): Promise<B[]> => { return [] } : () => Promise<B[]> |
| 33 | +>Promise : Promise<T> |
| 34 | +>B : B |
| 35 | +>[] : undefined[] |
| 36 | + |
| 37 | + const [resultA, resultB] = await Promise.all([ |
| 38 | +>resultA : A[] |
| 39 | +>resultB : B[] |
| 40 | +>await Promise.all([ providerA(), providerB(), ]) : [A[], B[]] |
| 41 | +>Promise.all([ providerA(), providerB(), ]) : Promise<[A[], B[]]> |
| 42 | +>Promise.all : { <TAll>(values: Iterable<TAll | PromiseLike<TAll>>): Promise<TAll[]>; <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; <T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; <T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; <T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; <T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): Promise<[T1, T2, T3, T4, T5, T6]>; <T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>]): Promise<[T1, T2, T3, T4, T5]>; <T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>]): Promise<[T1, T2, T3, T4]>; <T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<[T1, T2, T3]>; <T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<[T1, T2]>; <T>(values: (T | PromiseLike<T>)[]): Promise<T[]>; } |
| 43 | +>Promise : PromiseConstructor |
| 44 | +>all : { <TAll>(values: Iterable<TAll | PromiseLike<TAll>>): Promise<TAll[]>; <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; <T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; <T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; <T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; <T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): Promise<[T1, T2, T3, T4, T5, T6]>; <T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>]): Promise<[T1, T2, T3, T4, T5]>; <T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>]): Promise<[T1, T2, T3, T4]>; <T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<[T1, T2, T3]>; <T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<[T1, T2]>; <T>(values: (T | PromiseLike<T>)[]): Promise<T[]>; } |
| 45 | +>[ providerA(), providerB(), ] : [Promise<A[]>, Promise<B[]>] |
| 46 | + |
| 47 | + providerA(), |
| 48 | +>providerA() : Promise<A[]> |
| 49 | +>providerA : () => Promise<A[]> |
| 50 | + |
| 51 | + providerB(), |
| 52 | +>providerB() : Promise<B[]> |
| 53 | +>providerB : () => Promise<B[]> |
| 54 | + |
| 55 | + ]); |
| 56 | + |
| 57 | + const dataA: A[] = resultA; |
| 58 | +>dataA : A[] |
| 59 | +>A : A |
| 60 | +>resultA : A[] |
| 61 | + |
| 62 | + const dataB: B[] = resultB; |
| 63 | +>dataB : B[] |
| 64 | +>B : B |
| 65 | +>resultB : B[] |
| 66 | + |
| 67 | + if (dataA && dataB) { |
| 68 | +>dataA && dataB : B[] |
| 69 | +>dataA : A[] |
| 70 | +>dataB : B[] |
| 71 | + |
| 72 | + return dataA.length + dataB.length; |
| 73 | +>dataA.length + dataB.length : number |
| 74 | +>dataA.length : number |
| 75 | +>dataA : A[] |
| 76 | +>length : number |
| 77 | +>dataB.length : number |
| 78 | +>dataB : B[] |
| 79 | +>length : number |
| 80 | + } |
| 81 | + return 0; |
| 82 | +>0 : 0 |
| 83 | +} |
0 commit comments