Skip to content

Infinite type instantiation around recursive conditional types #60237

@mstniy

Description

@mstniy

πŸ”Ž Search Terms

infinite type instantiation excessively deep recursive conditional

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about infinite and recursive types.

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.6.3#code/C4TwDgpgBAggPARQDRQMoD4oF4oKhAD2AgDsATAZygG8oBDALnpJCgF8oB+WRAbQCI6-ALooMUJiQgA3CACcA3ACglASxLE5AMzoBjaACE4AFUzUlUKFsToAFAEcmCAJRN4yKKeVsVoSFABhbCgjajZMQmJyKiN1LXkoAA1MbkSJKClZRV9waDScIMjSSmZWbmA5AFdoJh0AGwoIZSA

πŸ’» Code

type A<Q, S> = Q extends { a: any } ? A<Q["a"], S> : never;

interface B<T> {
  f<Q>(q: Q): A<Q, T>;
}

type C = B<{}> extends B<infer X> ? X : never;

type X = C extends any ? true : false;
//       ~ Type instantiation is excessively deep and possibly infinite.(2589) 

πŸ™ Actual behavior

The last line errors out.

πŸ™‚ Expected behavior

The code should pass the type check.

Additional information about the issue

An alternative way to get the same error: https://www.typescriptlang.org/play/?ts=5.6.3#code/C4TwDgpgBAggPARQDRQMoD4oF4oKhAD2AgDsATAZygG8oBDALnpJCgF8oB+WRAbQCI6-ALooMUJiQgA3CACcA3ACglASxLE5AMzoBjaACE4AFUzUlUKFsToAFAEcmCAJRN4yKKeVsVZCLoAbOjloLQBXEl1gVQB7EigAWzoAawgjU1tgJmNXKHT0ZSU-QODQiKjY+OsMrM9c6RjVMkLrI2o2dDsk1INbEjCAgPoqOhZhmjZnZ2UgA

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      close