Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Constraints of nested conditional types applied to constrained type variables are incorrect #59868

Open
Andarist opened this issue Sep 5, 2024 · 1 comment Β· May be fixed by #59886
Open

Constraints of nested conditional types applied to constrained type variables are incorrect #59868

Andarist opened this issue Sep 5, 2024 · 1 comment Β· May be fixed by #59886
Labels
Bug A bug in TypeScript Help Wanted You can do this
Milestone

Comments

@Andarist
Copy link
Contributor

Andarist commented Sep 5, 2024

πŸ”Ž Search Terms

constraints conditional types type variables nested

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.7.0-dev.20240904#code/C4TwDgpgBAkgzgWQIbAMYAsCWA7A5gZWACcdcB5bCAGQgDcIAbAHgBUoIAPYCbAEzihxipAHxQAvFDadufAQAMkAEgDeQkngC+8gFBQoAfijEArhD1QAXFABmSBnAgBuHTpsnsqYJgD22WwBMTPjsXDz8gsJ4IgAUHNbwyGhYeIQa5JQ09Mz4IgCUUCoWDBDAxtam0JIcTlAA9HVQAKJERD5ExaW21nYOVVA19Y0tbR2arqCQsIgoGKRppCwA7j5ZjHCsobIR6qISUlvhCspqUbjaFkbSYXJQ8qq7WgBeuvr6RpUW+j32jhY-fRcbg8Xl8-hsAGZgodbo9cLF4tMknNUmdlqs6OtgvlCp0ysAKkQzPtBg1mq12njurZfv1SY0yABrKAAIxMZTg6B8JgYvFZ0CQ-ggFLGOiAA

πŸ’» Code

type IsMatchingStringOneLevel<T extends string> = T extends `a${string}`
  ? true
  : false;

function f2<S extends string>(x: IsMatchingStringOneLevel<S>) {
  let t: true = x; // Error
  let f: false = x; // Error
}

type IsMatchingStringTwoLevels<T extends string> = T extends `a${string}`
  ? T extends `${string}z`
    ? true
    : false
  : false;

function f3<S extends string>(x: IsMatchingStringTwoLevels<S>) {
  let t: true = x; // Error
  let f: false = x; // Ok but should be an error
}

πŸ™ Actual behavior

It doesn't error on the fourth assignment

πŸ™‚ Expected behavior

It should error

Additional information about the issue

This is just a variant of what was fixed for one-level conditionals in #56004

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug A bug in TypeScript Help Wanted You can do this
Projects
None yet
3 participants
@RyanCavanaugh @Andarist and others