File: awaitedTypeStrictNull.errors.txt

package info (click to toggle)
node-typescript 4.9.5%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 533,908 kB
  • sloc: javascript: 2,018,330; makefile: 7; sh: 1
file content (71 lines) | stat: -rw-r--r-- 3,449 bytes parent folder | download | duplicates (3)
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
tests/cases/compiler/awaitedTypeStrictNull.ts(18,12): error TS2589: Type instantiation is excessively deep and possibly infinite.
tests/cases/compiler/awaitedTypeStrictNull.ts(22,12): error TS2589: Type instantiation is excessively deep and possibly infinite.


==== tests/cases/compiler/awaitedTypeStrictNull.ts (2 errors) ====
    type T1 = Awaited<number>;
    type T2 = Awaited<Promise<number>>;
    type T3 = Awaited<number | Promise<number>>;
    type T4 = Awaited<number | Promise<string>>;
    type T5 = Awaited<{ then: number }>;
    type T6 = Awaited<{ then(): void }>; // never (non-promise "thenable")
    type T7 = Awaited<{ then(x: number): void }>; // never (non-promise "thenable")
    type T8 = Awaited<{ then(x: () => void): void }>; // unknown
    type T9 = Awaited<any>;
    type T10 = Awaited<never>;
    type T11 = Awaited<unknown>;
    type T12 = Awaited<Promise<Promise<number>>>;
    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
    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
    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
    
    interface BadPromise { then(cb: (value: BadPromise) => void): void; }
    type T16 = Awaited<BadPromise>; // error
               ~~~~~~~~~~~~~~~~~~~
!!! error TS2589: Type instantiation is excessively deep and possibly infinite.
    
    interface BadPromise1 { then(cb: (value: BadPromise2) => void): void; }
    interface BadPromise2 { then(cb: (value: BadPromise1) => void): void; }
    type T17 = Awaited<BadPromise1>; // error
               ~~~~~~~~~~~~~~~~~~~~
!!! error TS2589: Type instantiation is excessively deep and possibly infinite.
    
    // https://github.com/microsoft/TypeScript/issues/46934
    type T18 = Awaited<{ then(cb: (value: number, other: { }) => void)}>; // number
    
    // https://github.com/microsoft/TypeScript/issues/33562
    type MaybePromise<T> = T | Promise<T> | PromiseLike<T>
    declare function MaybePromise<T>(value: T): MaybePromise<T>;
    
    async function main() {
        let aaa: number;
        let bbb: string;
        [
            aaa,
            bbb,
        ] = await Promise.all([
            MaybePromise(1),
            MaybePromise('2'),
            MaybePromise(true),
        ])
    }
    
    // https://github.com/microsoft/TypeScript/issues/45924
    class Api<D = {}> {
    	// Should result in `Promise<T>` instead of `Promise<Awaited<T>>`.
    	async post<T = D>() { return this.request<T>(); }
    	async request<D>(): Promise<D> { throw new Error(); }
    }
    
    declare const api: Api;
    interface Obj { x: number }
    
    async function fn<T>(): Promise<T extends object ? { [K in keyof T]: Obj } : Obj> {
    	// Per #45924, this was failing due to incorrect inference both above and here.
    	// Should not error.
    	return api.post();
    }
    
    // helps with tests where '.types' just prints out the type alias name
    type _Expect<TActual extends TExpected, TExpected> = TActual;