Microsoft/TypeScript

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

Open

#59,868 创建于 2024年9月5日

在 GitHub 查看
 (0 评论) (0 反应) (0 负责人)TypeScript (6,726 fork)batch import
BugDomain: Conditional TypesHelp Wanted

仓库指标

Star
 (48,455 star)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 9 个 PR)

描述

🔎 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 https://github.com/microsoft/TypeScript/pull/56004

贡献者指南