From 59b0095eba886d2db1833db673b6743634b3a4c4 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 27 Aug 2017 08:51:42 -0700 Subject: [PATCH] Clean up flags propagation for object literal types --- src/compiler/checker.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 088cb4bb851..4c626b56483 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7834,7 +7834,9 @@ namespace ts { members.set(leftProp.escapedName, getNonReadonlySymbol(leftProp)); } } - return createAnonymousType(undefined, members, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo); + const result = createAnonymousType(undefined, members, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo); + result.flags |= (left.flags | right.flags) & TypeFlags.PropagatingFlags; + return result; } function getNonReadonlySymbol(prop: Symbol) { @@ -13534,7 +13536,6 @@ namespace ts { let propertiesTable = createSymbolTable(); let propertiesArray: Symbol[] = []; let spread: Type = emptyObjectType; - let propagatedFlags: TypeFlags = 0; const contextualType = getApparentTypeOfContextualType(node); const contextualTypeHasPattern = contextualType && contextualType.pattern && @@ -13678,8 +13679,6 @@ namespace ts { spread = getSpreadType(spread, createObjectLiteralType()); } if (spread.flags & TypeFlags.Object) { - // only set the symbol and flags if this is a (fresh) object type - spread.flags |= propagatedFlags; spread.flags |= TypeFlags.FreshLiteral; (spread as ObjectType).objectFlags |= ObjectFlags.ObjectLiteral; spread.symbol = node.symbol; @@ -13702,9 +13701,6 @@ namespace ts { if (inDestructuringPattern) { result.pattern = node; } - if (!(result.flags & TypeFlags.Nullable)) { - propagatedFlags |= (result.flags & TypeFlags.PropagatingFlags); - } return result; } }