From db9ed00a0f131585fa1ee74118e3ba75328e3024 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Mon, 6 Nov 2017 07:48:09 -0800 Subject: [PATCH] Remove readonly from index signatures of a spread --- src/compiler/checker.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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)); }