You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
typeReadonlyTuple<T,Nextendsnumber,RextendsArray<T>=[]>=R['length']extendsN
? readonly[...R]
: ReadonlyTuple<T,N,[T, ...R]>;typeArrayMinN<T,Nextendsnumber>=numberextendsN
? Array<T>
: Nextends0
? Array<T>
: [...ReadonlyTuple<T,N>, ...Array<T>];declarefunctionhasAtLeast<T,Nextendsnumber>(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)"
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β’.
The text was updated successfully, but these errors were encountered:
Previously, we'd obtain the constraint of IsArray by applying the distributive conditional type to the constraint of U
Sounds like ArrayMinN<T, N> would have been constrained to ArrayMinN<T, number> which just takes the first branch of your ternary to Array<T> whereas now,
A | B when C possibly extends X.
So it will take the union of all of your ternary branches, which will cause an infinite loop in ReadonlyTuple.
So it seems like this is intended behavior. And it is doing you a favor by showing that ArrayMinN<T, N> in fact does not extend ReadonlyArray<T>:
Type instantiation is excessively deep and possibly infinite.
I don't know if there's a fully robust implementation of ArrayMinN that doesn't involve the Nat inductive type (TypeScript doesn't have inductive types in general AFAIK)
You could try using // @ts-expect-error if you don't care about the non-natural number case.
Unfortunately, whether or not you hit this limiter is very dependent on the exact order that things happen internally, so implementation details can cause this to happen or not happen pretty easily.
π 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
π Actual behavior
The function
hasAtLeast
does not typecheck, with an error on the return typedata 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β’.
The text was updated successfully, but these errors were encountered: