forked from microsoft/TypeScript
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathflatArrayNoExcessiveStackDepth.types
116 lines (101 loc) · 4.48 KB
/
flatArrayNoExcessiveStackDepth.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
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
//// [tests/cases/compiler/flatArrayNoExcessiveStackDepth.ts] ////
=== Performance Stats ===
Type Count: 2,500
Instantiation count: 2,500
=== flatArrayNoExcessiveStackDepth.ts ===
// Repro from #43493
declare const foo: unknown[];
>foo : unknown[]
> : ^^^^^^^^^
const bar = foo.flatMap(bar => bar as Foo);
>bar : string[]
> : ^^^^^^^^
>foo.flatMap(bar => bar as Foo) : string[]
> : ^^^^^^^^
>foo.flatMap : <U, This = undefined>(callback: (this: This, value: unknown, index: number, array: unknown[]) => U | readonly U[], thisArg?: This | undefined) => U[]
> : ^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>foo : unknown[]
> : ^^^^^^^^^
>flatMap : <U, This = undefined>(callback: (this: This, value: unknown, index: number, array: unknown[]) => U | readonly U[], thisArg?: This | undefined) => U[]
> : ^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>bar => bar as Foo : (this: undefined, bar: unknown) => Foo
> : ^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
>bar : unknown
> : ^^^^^^^
>bar as Foo : Foo
> : ^^^
>bar : unknown
> : ^^^^^^^
interface Foo extends Array<string> {}
// Repros from comments in #43249
const repro_43249 = (value: unknown) => {
>repro_43249 : (value: unknown) => void
> : ^ ^^ ^^^^^^^^^
>(value: unknown) => { if (typeof value !== "string") { throw new Error("No"); } const match = value.match(/anything/) || []; const [, extracted] = match;} : (value: unknown) => void
> : ^ ^^ ^^^^^^^^^
>value : unknown
> : ^^^^^^^
if (typeof value !== "string") {
>typeof value !== "string" : boolean
> : ^^^^^^^
>typeof value : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>value : unknown
> : ^^^^^^^
>"string" : "string"
> : ^^^^^^^^
throw new Error("No");
>new Error("No") : Error
> : ^^^^^
>Error : ErrorConstructor
> : ^^^^^^^^^^^^^^^^
>"No" : "No"
> : ^^^^
}
const match = value.match(/anything/) || [];
>match : [] | RegExpMatchArray
> : ^^^^^^^^^^^^^^^^^^^^^
>value.match(/anything/) || [] : RegExpMatchArray | []
> : ^^^^^^^^^^^^^^^^^^^^^
>value.match(/anything/) : RegExpMatchArray | null
> : ^^^^^^^^^^^^^^^^^^^^^^^
>value.match : { (regexp: string | RegExp): RegExpMatchArray | null; (matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; }
> : ^^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^
>value : string
> : ^^^^^^
>match : { (regexp: string | RegExp): RegExpMatchArray | null; (matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; }
> : ^^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^
>/anything/ : RegExp
> : ^^^^^^
>[] : []
> : ^^
const [, extracted] = match;
> : undefined
> : ^^^^^^^^^
>extracted : string
> : ^^^^^^
>match : [] | RegExpMatchArray
> : ^^^^^^^^^^^^^^^^^^^^^
};
function f<Arr, D extends number>(x: FlatArray<Arr, any>, y: FlatArray<Arr, D>) {
>f : <Arr, D extends number>(x: FlatArray<Arr, any>, y: FlatArray<Arr, D>) => void
> : ^ ^^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^^^^^
>x : FlatArray<Arr, any>
> : ^^^^^^^^^^^^^^^^^^^
>y : FlatArray<Arr, D>
> : ^^^^^^^^^^^^^^^^^
x = y;
>x = y : FlatArray<Arr, D>
> : ^^^^^^^^^^^^^^^^^
>x : FlatArray<Arr, any>
> : ^^^^^^^^^^^^^^^^^^^
>y : FlatArray<Arr, D>
> : ^^^^^^^^^^^^^^^^^
y = x; // Error
>y = x : FlatArray<Arr, any>
> : ^^^^^^^^^^^^^^^^^^^
>y : FlatArray<Arr, D>
> : ^^^^^^^^^^^^^^^^^
>x : FlatArray<Arr, any>
> : ^^^^^^^^^^^^^^^^^^^
}