Skip to content

Regression in 5.4: Excessive stack depth when comparing recursive typeΒ #57915

Closed
@cjquines

Description

@cjquines

πŸ”Ž Search Terms

"excessive stack depth", "ts2321"

πŸ•— Version & Regression Information

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.4.3#code/C4TwDgpgBAShCGATA9gOwDYgCoFczogB4sAaKAOSggA9gJVEBnKVHAWwCMIAnMmK2vSZQAgt27wQxAHxQAvFADaAXVlyAUAEgYigOQFUAc2AALXcoF0Gzcuqj2oAfijcEKDCCUA6HzGV2HAC5YNzRMXHwiUgoyRWifLz9pAG51dVBIUXFJAFkAS1RyYjJKGithVk4eNRZ2Lm5LIRsA5zEJKSxpAODSwWsoAAYA+1bsjq6HKGDFBLgkMOw8AmKKaTIEtskZZVT1RAgAY3R4VygAMxxUA+A8tCgTeEYRYAAZBEZgFd7y5kr66QAFAFEPBgPBgnN3JhNuMSAE2AU8mx2D04QBKYIgsFQPLMGH5QpfFJAA

πŸ’» Code

type ReadonlyTuple<T, N extends number, R extends Array<T> = []> =
	R['length'] extends N
    ? readonly [...R]
    : ReadonlyTuple<T, N, [T, ...R]>;

type ArrayMinN<T, N extends number> = number extends N
  ? Array<T>
  : N extends 0
    ? Array<T>
    : [...ReadonlyTuple<T, N>, ...Array<T>];

declare function hasAtLeast<T, N extends number>(
  data: ReadonlyArray<T>,
  minimum: N,
): data is ArrayMinN<T, N>;

πŸ™ Actual behavior

The function hasAtLeast does not typecheck, with an error on the return type data is ArrayMinN<T, N>;: "Excessive stack depth comparing types 'ArrayMinN<T, N>' and 'readonly T[]'.(2321)"

πŸ™‚ Expected behavior

No type error.

Additional information about the issue

This was reported in remeda/remeda#572.

It's not clear to me whether this is working as intended, though it is a regression. It's not hard to rewrite the type to make it work, but wondering if it's a Deeper Problemβ„’.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Not a DefectThis behavior is one of several equally-correct options

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions