=== tests/cases/compiler/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 : (callback: (this: This, value: unknown, index: number, array: unknown[]) => U | readonly U[], thisArg?: This | undefined) => U[] >foo : unknown[] >flatMap : (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 {} // 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 >[] : never[] const [, extracted] = match; > : undefined >extracted : string >match : RegExpMatchArray }; function f(x: FlatArray, y: FlatArray) { >f : (x: FlatArray, y: FlatArray) => void >x : FlatArray >y : FlatArray x = y; >x = y : FlatArray >x : FlatArray >y : FlatArray y = x; // Error >y = x : Arr extends readonly (infer InnerArr)[] ? FlatArray : Arr >y : FlatArray >x : Arr extends readonly (infer InnerArr)[] ? FlatArray : Arr }