From 040effd603cf870eaef49d912403a597a7714950 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 9 Feb 2016 15:35:55 -0800 Subject: [PATCH] Include index signatures in object literal types only when computed properties are present --- src/compiler/checker.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2f236ed6e44..e6dec1d45ad 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8288,6 +8288,7 @@ namespace ts { const contextualTypeHasPattern = contextualType && contextualType.pattern && (contextualType.pattern.kind === SyntaxKind.ObjectBindingPattern || contextualType.pattern.kind === SyntaxKind.ObjectLiteralExpression); let typeFlags: TypeFlags = 0; + let hasDynamicProperties = false; let patternWithComputedProperties = false; for (const memberDecl of node.properties) { @@ -8353,7 +8354,10 @@ namespace ts { checkAccessorDeclaration(memberDecl); } - if (!hasDynamicName(memberDecl)) { + if (hasDynamicName(memberDecl)) { + hasDynamicProperties = true; + } + else { propertiesTable[member.name] = member; } propertiesArray.push(member); @@ -8385,7 +8389,7 @@ namespace ts { return result; function getIndexInfo(kind: IndexKind) { - if (contextualType && contextualTypeHasIndexSignature(contextualType, kind)) { + if (hasDynamicProperties && contextualType && contextualTypeHasIndexSignature(contextualType, kind)) { const propTypes: Type[] = []; for (let i = 0; i < propertiesArray.length; i++) { const propertyDecl = node.properties[i];