@@ -4426,6 +4426,22 @@ namespace ts {
44264426 return location.kind === SyntaxKind.SourceFile || isAmbientModule(location);
44274427 }
44284428
4429+ function getNameOfSymbolFromNameType(symbol: Symbol, context?: NodeBuilderContext) {
4430+ const nameType = symbol.nameType;
4431+ if (nameType) {
4432+ if (nameType.flags & TypeFlags.StringOrNumberLiteral) {
4433+ const name = "" + (<StringLiteralType | NumberLiteralType>nameType).value;
4434+ if (!isIdentifierText(name, compilerOptions.target) && !isNumericLiteralName(name)) {
4435+ return `"${escapeString(name, CharacterCodes.doubleQuote)}"`;
4436+ }
4437+ return name;
4438+ }
4439+ if (nameType.flags & TypeFlags.UniqueESSymbol) {
4440+ return `[${getNameOfSymbolAsWritten((<UniqueESSymbolType>nameType).symbol, context)}]`;
4441+ }
4442+ }
4443+ }
4444+
44294445 /**
44304446 * Gets a human-readable name for a symbol.
44314447 * Should *not* be used for the right-hand side of a `.` -- use `symbolName(symbol)` for that instead.
@@ -4450,6 +4466,13 @@ namespace ts {
44504466 if (isCallExpression(declaration) && isBindableObjectDefinePropertyCall(declaration)) {
44514467 return symbolName(symbol);
44524468 }
4469+ if (isComputedPropertyName(name) && !(getCheckFlags(symbol) & CheckFlags.Late) && symbol.nameType && symbol.nameType.flags & TypeFlags.StringOrNumberLiteral) {
4470+ // Computed property name isn't late bound, but has a well-known name type - use name type to generate a symbol name
4471+ const result = getNameOfSymbolFromNameType(symbol, context);
4472+ if (result !== undefined) {
4473+ return result;
4474+ }
4475+ }
44534476 return declarationNameToString(name);
44544477 }
44554478 if (declaration.parent && declaration.parent.kind === SyntaxKind.VariableDeclaration) {
@@ -4465,16 +4488,8 @@ namespace ts {
44654488 return declaration.kind === SyntaxKind.ClassExpression ? "(Anonymous class)" : "(Anonymous function)";
44664489 }
44674490 }
4468- const nameType = symbol.nameType;
4469- if (nameType) {
4470- if (nameType.flags & TypeFlags.StringLiteral && !isIdentifierText((<StringLiteralType>nameType).value, compilerOptions.target)) {
4471- return `"${escapeString((<StringLiteralType>nameType).value, CharacterCodes.doubleQuote)}"`;
4472- }
4473- if (nameType && nameType.flags & TypeFlags.UniqueESSymbol) {
4474- return `[${getNameOfSymbolAsWritten((<UniqueESSymbolType>nameType).symbol, context)}]`;
4475- }
4476- }
4477- return symbolName(symbol);
4491+ const name = getNameOfSymbolFromNameType(symbol, context);
4492+ return name !== undefined ? name : symbolName(symbol);
44784493 }
44794494
44804495 function isDeclarationVisible(node: Node): boolean {
0 commit comments