diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 47cc9c27b886b..f8771ba8e6932 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -15022,7 +15022,7 @@ namespace ts { // purposes of resolution. This means such types aren't subject to the instatiation depth limiter. while (true) { const isUnwrapped = isTypicalNondistributiveConditional(root); - const checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.checkType), mapper); + const checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, getActualTypeVariable(root.checkType)), mapper); const checkTypeInstantiable = isGenericObjectType(checkType) || isGenericIndexType(checkType); const extendsType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), mapper); if (checkType === wildcardType || extendsType === wildcardType) { diff --git a/tests/baselines/reference/curiousNestedConditionalEvaluationResult.js b/tests/baselines/reference/curiousNestedConditionalEvaluationResult.js new file mode 100644 index 0000000000000..c2b09567a59b4 --- /dev/null +++ b/tests/baselines/reference/curiousNestedConditionalEvaluationResult.js @@ -0,0 +1,7 @@ +//// [curiousNestedConditionalEvaluationResult.ts] +// regression test for #43123 +type Hmm = [0] extends [infer T, any?] ? + [T, [0] extends [T] ? true : false] + : never + +//// [curiousNestedConditionalEvaluationResult.js] diff --git a/tests/baselines/reference/curiousNestedConditionalEvaluationResult.symbols b/tests/baselines/reference/curiousNestedConditionalEvaluationResult.symbols new file mode 100644 index 0000000000000..f88f243aa8d73 --- /dev/null +++ b/tests/baselines/reference/curiousNestedConditionalEvaluationResult.symbols @@ -0,0 +1,11 @@ +=== tests/cases/compiler/curiousNestedConditionalEvaluationResult.ts === +// regression test for #43123 +type Hmm = [0] extends [infer T, any?] ? +>Hmm : Symbol(Hmm, Decl(curiousNestedConditionalEvaluationResult.ts, 0, 0)) +>T : Symbol(T, Decl(curiousNestedConditionalEvaluationResult.ts, 1, 29)) + + [T, [0] extends [T] ? true : false] +>T : Symbol(T, Decl(curiousNestedConditionalEvaluationResult.ts, 1, 29)) +>T : Symbol(T, Decl(curiousNestedConditionalEvaluationResult.ts, 1, 29)) + + : never diff --git a/tests/baselines/reference/curiousNestedConditionalEvaluationResult.types b/tests/baselines/reference/curiousNestedConditionalEvaluationResult.types new file mode 100644 index 0000000000000..1a68537146281 --- /dev/null +++ b/tests/baselines/reference/curiousNestedConditionalEvaluationResult.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/curiousNestedConditionalEvaluationResult.ts === +// regression test for #43123 +type Hmm = [0] extends [infer T, any?] ? +>Hmm : [0, true] + + [T, [0] extends [T] ? true : false] +>true : true +>false : false + + : never diff --git a/tests/cases/compiler/curiousNestedConditionalEvaluationResult.ts b/tests/cases/compiler/curiousNestedConditionalEvaluationResult.ts new file mode 100644 index 0000000000000..26784d466599d --- /dev/null +++ b/tests/cases/compiler/curiousNestedConditionalEvaluationResult.ts @@ -0,0 +1,4 @@ +// regression test for #43123 +type Hmm = [0] extends [infer T, any?] ? + [T, [0] extends [T] ? true : false] + : never \ No newline at end of file