From fc85ba9e6a372b1f256e663380457b097c7b9c9d Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 6 Apr 2018 09:52:00 -0700 Subject: [PATCH] Limit getLiteralTypeFromPropertyName to only return string-like types --- src/compiler/checker.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ff3d53229ba..216854e9b6e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8108,10 +8108,16 @@ namespace ts { } function getLiteralTypeFromPropertyName(prop: Symbol) { - if (getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier || isKnownSymbol(prop)) { - return neverType; + if (!(getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier)) { + const nameType = getLateBoundSymbol(prop).nameType; + if (nameType) { + return nameType.flags & TypeFlags.StringLiteral ? nameType : neverType; + } + if (!isKnownSymbol(prop)) { + return getLiteralType(symbolName(prop)); + } } - return getLateBoundSymbol(prop).nameType || getLiteralType(symbolName(prop)); + return neverType; } function getLiteralTypeFromPropertyNames(type: Type) {