File: deepComparisons.symbols

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 (140 lines) | stat: -rw-r--r-- 5,341 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
=== tests/cases/compiler/deepComparisons.ts ===
function f1<T, K1 extends keyof T, K2 extends keyof T[K1]>() {
>f1 : Symbol(f1, Decl(deepComparisons.ts, 0, 0))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))
>K1 : Symbol(K1, Decl(deepComparisons.ts, 0, 14))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))
>K2 : Symbol(K2, Decl(deepComparisons.ts, 0, 34))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))
>K1 : Symbol(K1, Decl(deepComparisons.ts, 0, 14))

    let v1: Extract<T, string> = 0 as any as T;  // Error
>v1 : Symbol(v1, Decl(deepComparisons.ts, 1, 7))
>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))

    let v2: Extract<T[K1], string> = 0 as any as T[K1];  // Error
>v2 : Symbol(v2, Decl(deepComparisons.ts, 2, 7))
>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))
>K1 : Symbol(K1, Decl(deepComparisons.ts, 0, 14))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))
>K1 : Symbol(K1, Decl(deepComparisons.ts, 0, 14))

    let v3: Extract<T[K1][K2], string> = 0 as any as T[K1][K2];  // No error
>v3 : Symbol(v3, Decl(deepComparisons.ts, 3, 7))
>Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))
>K1 : Symbol(K1, Decl(deepComparisons.ts, 0, 14))
>K2 : Symbol(K2, Decl(deepComparisons.ts, 0, 34))
>T : Symbol(T, Decl(deepComparisons.ts, 0, 12))
>K1 : Symbol(K1, Decl(deepComparisons.ts, 0, 14))
>K2 : Symbol(K2, Decl(deepComparisons.ts, 0, 34))
}

type Foo<T> = { x: Foo<T> };
>Foo : Symbol(Foo, Decl(deepComparisons.ts, 4, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 6, 9))
>x : Symbol(x, Decl(deepComparisons.ts, 6, 15))
>Foo : Symbol(Foo, Decl(deepComparisons.ts, 4, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 6, 9))

type Bar<T> = { x: Bar<T[]> };
>Bar : Symbol(Bar, Decl(deepComparisons.ts, 6, 28))
>T : Symbol(T, Decl(deepComparisons.ts, 7, 9))
>x : Symbol(x, Decl(deepComparisons.ts, 7, 15))
>Bar : Symbol(Bar, Decl(deepComparisons.ts, 6, 28))
>T : Symbol(T, Decl(deepComparisons.ts, 7, 9))

function f2<U>() {
>f2 : Symbol(f2, Decl(deepComparisons.ts, 7, 30))
>U : Symbol(U, Decl(deepComparisons.ts, 9, 12))

    let x: Foo<U> = 0 as any as Bar<U>;  // Error, excessive stack depth
>x : Symbol(x, Decl(deepComparisons.ts, 10, 7))
>Foo : Symbol(Foo, Decl(deepComparisons.ts, 4, 1))
>U : Symbol(U, Decl(deepComparisons.ts, 9, 12))
>Bar : Symbol(Bar, Decl(deepComparisons.ts, 6, 28))
>U : Symbol(U, Decl(deepComparisons.ts, 9, 12))
}

type Foo1<T> = { x: Foo2<T> };
>Foo1 : Symbol(Foo1, Decl(deepComparisons.ts, 11, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 13, 10))
>x : Symbol(x, Decl(deepComparisons.ts, 13, 16))
>Foo2 : Symbol(Foo2, Decl(deepComparisons.ts, 13, 30))
>T : Symbol(T, Decl(deepComparisons.ts, 13, 10))

type Foo2<T> = { x: Foo1<T> };
>Foo2 : Symbol(Foo2, Decl(deepComparisons.ts, 13, 30))
>T : Symbol(T, Decl(deepComparisons.ts, 14, 10))
>x : Symbol(x, Decl(deepComparisons.ts, 14, 16))
>Foo1 : Symbol(Foo1, Decl(deepComparisons.ts, 11, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 14, 10))

function f3<U>() {
>f3 : Symbol(f3, Decl(deepComparisons.ts, 14, 30))
>U : Symbol(U, Decl(deepComparisons.ts, 16, 12))

    let x: Foo1<U> = 0 as any as Bar<U>;  // No error!
>x : Symbol(x, Decl(deepComparisons.ts, 17, 7))
>Foo1 : Symbol(Foo1, Decl(deepComparisons.ts, 11, 1))
>U : Symbol(U, Decl(deepComparisons.ts, 16, 12))
>Bar : Symbol(Bar, Decl(deepComparisons.ts, 6, 28))
>U : Symbol(U, Decl(deepComparisons.ts, 16, 12))
}

// Repro from #46500

type F<T> = {} & (
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))

    T extends [any, ...any[]]
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))

        ? { [K in keyof T]?: F<T[K]> }
>K : Symbol(K, Decl(deepComparisons.ts, 24, 13))
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
>K : Symbol(K, Decl(deepComparisons.ts, 24, 13))

        : T extends any[]
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))

            ? F<T[number]>[]
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))

            : T extends { [K: string]: any }
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
>K : Symbol(K, Decl(deepComparisons.ts, 27, 27))

                ? { [K in keyof T]?: F<T[K]> }
>K : Symbol(K, Decl(deepComparisons.ts, 28, 21))
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
>K : Symbol(K, Decl(deepComparisons.ts, 28, 21))

                : { x: string }
>x : Symbol(x, Decl(deepComparisons.ts, 29, 19))

);

declare function f<T = any>(): F<T>;
>f : Symbol(f, Decl(deepComparisons.ts, 30, 2))
>T : Symbol(T, Decl(deepComparisons.ts, 32, 19))
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
>T : Symbol(T, Decl(deepComparisons.ts, 32, 19))

function g() {
>g : Symbol(g, Decl(deepComparisons.ts, 32, 36))

    return f() as F<any>;
>f : Symbol(f, Decl(deepComparisons.ts, 30, 2))
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
}