diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8bb8f3869ee44..91ce0e0a147eb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -15019,8 +15019,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function getSubstitutionType(baseType: Type, constraint: Type) { - if (constraint.flags & TypeFlags.AnyOrUnknown || constraint === baseType || - !isGenericType(baseType) && !isGenericType(constraint)) { + if (constraint.flags & TypeFlags.AnyOrUnknown || constraint === baseType) { return baseType; } const id = `${getTypeId(baseType)}>${getTypeId(constraint)}`; diff --git a/tests/baselines/reference/substitutionTypeForNonGenericIndexedAccessType.symbols b/tests/baselines/reference/substitutionTypeForNonGenericIndexedAccessType.symbols new file mode 100644 index 0000000000000..bb0d2675e36b0 --- /dev/null +++ b/tests/baselines/reference/substitutionTypeForNonGenericIndexedAccessType.symbols @@ -0,0 +1,10 @@ +=== tests/cases/compiler/substitutionTypeForNonGenericIndexedAccessType.ts === +interface A {} +>A : Symbol(A, Decl(substitutionTypeForNonGenericIndexedAccessType.ts, 0, 0)) + +type B = A extends Record<'foo', string> ? A['foo'] : string; // no error +>B : Symbol(B, Decl(substitutionTypeForNonGenericIndexedAccessType.ts, 0, 14)) +>A : Symbol(A, Decl(substitutionTypeForNonGenericIndexedAccessType.ts, 0, 0)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>A : Symbol(A, Decl(substitutionTypeForNonGenericIndexedAccessType.ts, 0, 0)) + diff --git a/tests/baselines/reference/substitutionTypeForNonGenericIndexedAccessType.types b/tests/baselines/reference/substitutionTypeForNonGenericIndexedAccessType.types new file mode 100644 index 0000000000000..2846f2f192315 --- /dev/null +++ b/tests/baselines/reference/substitutionTypeForNonGenericIndexedAccessType.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/substitutionTypeForNonGenericIndexedAccessType.ts === +interface A {} + +type B = A extends Record<'foo', string> ? A['foo'] : string; // no error +>B : string + diff --git a/tests/cases/compiler/substitutionTypeForNonGenericIndexedAccessType.ts b/tests/cases/compiler/substitutionTypeForNonGenericIndexedAccessType.ts new file mode 100644 index 0000000000000..bc78add75a1d4 --- /dev/null +++ b/tests/cases/compiler/substitutionTypeForNonGenericIndexedAccessType.ts @@ -0,0 +1,6 @@ +// @strict: true +// @noEmit: true + +interface A {} + +type B = A extends Record<'foo', string> ? A['foo'] : string; // no error