@@ -5501,7 +5501,7 @@ namespace ts {
55015501 prop.checkFlags = templateReadonly || modifiersProp && isReadonlySymbol(modifiersProp) ? CheckFlags.Readonly : 0;
55025502 prop.type = propType;
55035503 if (propertySymbol) {
5504- prop.mappedTypeOrigin = propertySymbol;
5504+ prop.syntheticOrigin = propertySymbol;
55055505 }
55065506 members.set(propName, prop);
55075507 }
@@ -7450,7 +7450,7 @@ namespace ts {
74507450 skippedPrivateMembers.set(rightProp.name, true);
74517451 }
74527452 else if (!isClassMethod(rightProp) && !isSetterWithoutGetter) {
7453- members.set(rightProp.name, rightProp);
7453+ members.set(rightProp.name, getNonReadonlySymbol( rightProp) );
74547454 }
74557455 }
74567456 for (const leftProp of getPropertiesOfType(left)) {
@@ -7466,7 +7466,6 @@ namespace ts {
74667466 const declarations: Declaration[] = concatenate(leftProp.declarations, rightProp.declarations);
74677467 const flags = SymbolFlags.Property | (leftProp.flags & SymbolFlags.Optional);
74687468 const result = createSymbol(flags, leftProp.name);
7469- result.checkFlags = isReadonlySymbol(leftProp) || isReadonlySymbol(rightProp) ? CheckFlags.Readonly : 0;
74707469 result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, TypeFacts.NEUndefined)]);
74717470 result.leftSpread = leftProp;
74727471 result.rightSpread = rightProp;
@@ -7475,12 +7474,24 @@ namespace ts {
74757474 }
74767475 }
74777476 else {
7478- members.set(leftProp.name, leftProp);
7477+ members.set(leftProp.name, getNonReadonlySymbol( leftProp) );
74797478 }
74807479 }
74817480 return createAnonymousType(undefined, members, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo);
74827481 }
74837482
7483+ function getNonReadonlySymbol(prop: Symbol) {
7484+ if (!isReadonlySymbol(prop)) {
7485+ return prop;
7486+ }
7487+ const flags = SymbolFlags.Property | (prop.flags & SymbolFlags.Optional);
7488+ const result = createSymbol(flags, prop.name);
7489+ result.type = getTypeOfSymbol(prop);
7490+ result.declarations = prop.declarations;
7491+ result.syntheticOrigin = prop;
7492+ return result;
7493+ }
7494+
74847495 function isClassMethod(prop: Symbol) {
74857496 return prop.flags & SymbolFlags.Method && find(prop.declarations, decl => isClassLike(decl.parent));
74867497 }
@@ -22144,10 +22155,10 @@ namespace ts {
2214422155 else if (symbol.flags & SymbolFlags.Transient) {
2214522156 if ((symbol as SymbolLinks).leftSpread) {
2214622157 const links = symbol as SymbolLinks;
22147- return [links.leftSpread, links.rightSpread];
22158+ return [...getRootSymbols( links.leftSpread), ...getRootSymbols( links.rightSpread) ];
2214822159 }
22149- if ((symbol as SymbolLinks).mappedTypeOrigin ) {
22150- return getRootSymbols((symbol as SymbolLinks).mappedTypeOrigin );
22160+ if ((symbol as SymbolLinks).syntheticOrigin ) {
22161+ return getRootSymbols((symbol as SymbolLinks).syntheticOrigin );
2215122162 }
2215222163
2215322164 let target: Symbol;
0 commit comments