|
| 1 | +tests/cases/compiler/awaitedType.ts(18,12): error TS2589: Type instantiation is excessively deep and possibly infinite. |
| 2 | +tests/cases/compiler/awaitedType.ts(22,12): error TS2589: Type instantiation is excessively deep and possibly infinite. |
| 3 | + |
| 4 | + |
| 5 | +==== tests/cases/compiler/awaitedType.ts (2 errors) ==== |
| 6 | + type T1 = Awaited<number>; |
| 7 | + type T2 = Awaited<Promise<number>>; |
| 8 | + type T3 = Awaited<number | Promise<number>>; |
| 9 | + type T4 = Awaited<number | Promise<string>>; |
| 10 | + type T5 = Awaited<{ then: number }>; |
| 11 | + type T6 = Awaited<{ then(): void }>; // never (non-promise "thenable") |
| 12 | + type T7 = Awaited<{ then(x: number): void }>; // never (non-promise "thenable") |
| 13 | + type T8 = Awaited<{ then(x: () => void): void }>; // unknown |
| 14 | + type T9 = Awaited<any>; |
| 15 | + type T10 = Awaited<never>; |
| 16 | + type T11 = Awaited<unknown>; |
| 17 | + type T12 = Awaited<Promise<Promise<number>>>; |
| 18 | + type T13 = _Expect<Awaited<Promise<Promise<number>> | string | null>, /*expected*/ string | number | null>; // otherwise just prints T13 in types tests, which isn't very helpful |
| 19 | + type T14 = _Expect<Awaited<Promise<Promise<number>> | string | undefined>, /*expected*/ string | number | undefined>; // otherwise just prints T14 in types tests, which isn't very helpful |
| 20 | + type T15 = _Expect<Awaited<Promise<Promise<number>> | string | null | undefined>, /*expected*/ string | number | null | undefined>; // otherwise just prints T15 in types tests, which isn't very helpful |
| 21 | + |
| 22 | + interface BadPromise { then(cb: (value: BadPromise) => void): void; } |
| 23 | + type T16 = Awaited<BadPromise>; // error |
| 24 | + ~~~~~~~~~~~~~~~~~~~ |
| 25 | +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. |
| 26 | + |
| 27 | + interface BadPromise1 { then(cb: (value: BadPromise2) => void): void; } |
| 28 | + interface BadPromise2 { then(cb: (value: BadPromise1) => void): void; } |
| 29 | + type T17 = Awaited<BadPromise1>; // error |
| 30 | + ~~~~~~~~~~~~~~~~~~~~ |
| 31 | +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. |
| 32 | + |
| 33 | + // https://github.com/microsoft/TypeScript/issues/33562 |
| 34 | + type MaybePromise<T> = T | Promise<T> | PromiseLike<T> |
| 35 | + declare function MaybePromise<T>(value: T): MaybePromise<T>; |
| 36 | + |
| 37 | + async function main() { |
| 38 | + let aaa: number; |
| 39 | + let bbb: string; |
| 40 | + [ |
| 41 | + aaa, |
| 42 | + bbb, |
| 43 | + ] = await Promise.all([ |
| 44 | + MaybePromise(1), |
| 45 | + MaybePromise('2'), |
| 46 | + MaybePromise(true), |
| 47 | + ]) |
| 48 | + } |
| 49 | + |
| 50 | + // helps with tests where '.types' just prints out the type alias name |
| 51 | + type _Expect<TActual extends TExpected, TExpected> = TActual; |
| 52 | + |
0 commit comments