From 758cdf337872067758ab65efbb850cfd6465da1d Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Aug 2015 15:07:04 -0700 Subject: [PATCH 1/2] Only obtain regular type of fresh object literal type if necessary --- src/compiler/checker.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e624eb41d86..58b7e920bff 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4640,7 +4640,9 @@ namespace ts { // and intersection types are further deconstructed on the target side, we don't want to // make the check again (as it might fail for a partial target type). Therefore we obtain // the regular source type and proceed with that. - source = getRegularTypeOfObjectLiteral(source); + if (target.flags & TypeFlags.UnionOrIntersection) { + source = getRegularTypeOfObjectLiteral(source); + } } let saveErrorInfo = errorInfo; From c05650aea3c473f41f4de0687080620758310527 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Wed, 9 Sep 2015 16:38:04 -0700 Subject: [PATCH 2/2] Actually cache regular version of fresh object literal type --- src/compiler/checker.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 58b7e920bff..3d1250616ef 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5507,6 +5507,7 @@ namespace ts { regularType.constructSignatures = (type).constructSignatures; regularType.stringIndexType = (type).stringIndexType; regularType.numberIndexType = (type).numberIndexType; + (type).regularType = regularType; } return regularType; }