diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e2e45b2ccb0..59964f388bb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7993,11 +7993,16 @@ namespace ts { } } - const spread = createAnonymousType(undefined, members, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo); + const spread = createAnonymousType( + symbol, + members, + emptyArray, + emptyArray, + getNonReadonlyIndexSignature(stringIndexInfo), + getNonReadonlyIndexSignature(numberIndexInfo)); spread.flags |= propagatedFlags; spread.flags |= TypeFlags.FreshLiteral | TypeFlags.ContainsObjectLiteral; (spread as ObjectType).objectFlags |= (ObjectFlags.ObjectLiteral | ObjectFlags.ContainsSpread); - spread.symbol = symbol; return spread; } @@ -8013,6 +8018,13 @@ namespace ts { return result; } + function getNonReadonlyIndexSignature(index: IndexInfo) { + if (index && index.isReadonly) { + return createIndexInfo(index.type, /*isReadonly*/ false, index.declaration); + } + return index; + } + function isClassMethod(prop: Symbol) { return prop.flags & SymbolFlags.Method && find(prop.declarations, decl => isClassLike(decl.parent)); }