From 3dd11e48a9fda2e4ee8d4efb2698eb9f92814980 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Wed, 9 Nov 2016 09:59:15 -0800 Subject: [PATCH] Properly implement type relationship for '[P in S]: X' and '[P in T]: Y' --- src/compiler/checker.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8ed8df17c68..cfabcd3f5ba 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7047,11 +7047,12 @@ namespace ts { } } if (isGenericMappedType(target)) { - // A type [P in S]: X is related to a type [P in T]: X if T is related to S. - if (isGenericMappedType(source) && - isRelatedTo(getConstraintTypeFromMappedType(target), getConstraintTypeFromMappedType(source), /*reportErrors*/ false) && - isTypeIdenticalTo(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target))) { - return Ternary.True; + // A type [P in S]: X is related to a type [P in T]: Y if T is related to S and X is related to Y. + if (isGenericMappedType(source)) { + if ((result = isRelatedTo(getConstraintTypeFromMappedType(target), getConstraintTypeFromMappedType(source), reportErrors)) && + (result = isRelatedTo(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target), reportErrors))) { + return result; + } } } else {