Skip to content

4.5.0 regression - Maximum call stack size exceeded with recursive conditional typesΒ #46316

Closed
@DetachHead

Description

@DetachHead

Bug Report

πŸ”Ž Search Terms

maximum call stack size exceeded

πŸ•— Version & Regression Information

4.5.0-dev.20211012

  • This changed between versions 4.4.3 and 4.5.0-beta

⏯ Playground Link

Playground link with relevant code

πŸ’» Code

type _PrependNextNum<A extends Array<unknown>> = A['length'] extends infer T
    ? [T, ...A] extends [...infer X] 
        ? X
        : never
    : never
type _Enumerate<A extends Array<unknown>, N extends number> = N extends A['length']
    ? A
    : _Enumerate<_PrependNextNum<A>, N> & number

export type Enumerate<N extends number> = number extends N
    ? number
    : _Enumerate<[], N> extends (infer E)[]
    ? E
    : never

declare function foo<T extends unknown[]>(value: T): Enumerate<T['length']> {
    return value.length
}

πŸ™ Actual behavior

image

πŸ™‚ Expected behavior

no crash

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptCrashFor flagging bugs which are compiler or service crashes or unclean exits, rather than bad outputFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions