Microsoft/TypeScript
Constraints of nested conditional types applied to constrained type variables are incorrect
オープン
#59,868 opened on 2024/09/05
BugDomain: Conditional TypesHelp Wanted
Repository metrics
- Stars
- (108,860 個のスター)
- PR merge metrics
- (平均マージ 6d 17h) (30d で 9 merged PRs)
説明
🔎 Search Terms
constraints conditional types type variables nested
🕗 Version & Regression Information
- This is the behavior in every version I tried
⏯ Playground Link
💻 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