@@ -6830,20 +6830,26 @@ namespace ts {
68306830 symbol.parent = source.parent;
68316831 symbol.type = type;
68326832 symbol.target = source;
6833- if (source.valueDeclaration) symbol.valueDeclaration = source.valueDeclaration;
6833+ if (source.valueDeclaration) {
6834+ symbol.valueDeclaration = source.valueDeclaration;
6835+ }
68346836 return symbol;
68356837 }
68366838
6837- function updateTypeOfMembers (type: Type, update : (propertyType: Type) => Type) {
6839+ function transformTypeOfMembers (type: Type, f : (propertyType: Type) => Type) {
68386840 const members: SymbolTable = {};
68396841 for (const property of getPropertiesOfObjectType(type)) {
68406842 const original = getTypeOfSymbol(property);
6841- const updated = update (original);
6843+ const updated = f (original);
68426844 members[property.name] = updated === original ? property : createTransientSymbol(property, updated);
68436845 };
68446846 return members;
68456847 }
68466848
6849+ /** Mark an object literal as exempt from the excess properties check.
6850+ * Recursively mark object literal members as exempt.
6851+ * Leave signatures alone since they are not subject to the check.
6852+ */
68476853 function getRegularTypeOfObjectLiteral(type: Type): Type {
68486854 if (!(type.flags & TypeFlags.FreshObjectLiteral)) {
68496855 return type;
@@ -6854,7 +6860,7 @@ namespace ts {
68546860 }
68556861
68566862 const resolved = <ResolvedType>type;
6857- const members = updateTypeOfMembers (type, prop => prop.flags & TypeFlags.FreshObjectLiteral ? getRegularTypeOfObjectLiteral(prop) : prop);
6863+ const members = transformTypeOfMembers (type, prop => prop.flags & TypeFlags.FreshObjectLiteral ? getRegularTypeOfObjectLiteral(prop) : prop);
68586864 const regularNew = createAnonymousType(resolved.symbol,
68596865 members,
68606866 resolved.callSignatures,
@@ -6867,7 +6873,7 @@ namespace ts {
68676873 }
68686874
68696875 function getWidenedTypeOfObjectLiteral(type: Type): Type {
6870- const members = updateTypeOfMembers (type, prop => {
6876+ const members = transformTypeOfMembers (type, prop => {
68716877 const widened = getWidenedType(prop);
68726878 return prop === widened ? prop : widened;
68736879 });
0 commit comments