@@ -3047,9 +3047,14 @@ namespace ts {
3047
3047
writeTypeReference(<TypeReference>type, nextFlags);
3048
3048
}
3049
3049
else if (type.flags & TypeFlags.EnumLiteral && !(type.flags & TypeFlags.Union)) {
3050
- buildSymbolDisplay(getParentOfSymbol(type.symbol), writer, enclosingDeclaration, SymbolFlags.Type, SymbolFormatFlags.None, nextFlags);
3051
- writePunctuation(writer, SyntaxKind.DotToken);
3052
- appendSymbolNameOnly(type.symbol, writer);
3050
+ const parent = getParentOfSymbol(type.symbol);
3051
+ buildSymbolDisplay(parent, writer, enclosingDeclaration, SymbolFlags.Type, SymbolFormatFlags.None, nextFlags);
3052
+ // In a literal enum type with a single member E { A }, E and E.A denote the
3053
+ // same type. We always display this type simply as E.
3054
+ if (getDeclaredTypeOfSymbol(parent).flags & TypeFlags.Union) {
3055
+ writePunctuation(writer, SyntaxKind.DotToken);
3056
+ appendSymbolNameOnly(type.symbol, writer);
3057
+ }
3053
3058
}
3054
3059
else if (getObjectFlags(type) & ObjectFlags.ClassOrInterface || type.flags & (TypeFlags.EnumLike | TypeFlags.TypeParameter)) {
3055
3060
// The specified symbol flags need to be reinterpreted as type flags
@@ -4952,23 +4957,19 @@ namespace ts {
4952
4957
if (declaration.kind === SyntaxKind.EnumDeclaration) {
4953
4958
for (const member of (<EnumDeclaration>declaration).members) {
4954
4959
const memberType = getLiteralType(getEnumMemberValue(member), enumCount, getSymbolOfNode(member));
4960
+ getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
4955
4961
if (!contains(memberTypeList, memberType)) {
4956
4962
memberTypeList.push(memberType);
4957
4963
}
4958
4964
}
4959
4965
}
4960
4966
}
4961
- if (memberTypeList.length > 1) {
4962
- for (const declaration of symbol.declarations) {
4963
- if (declaration.kind === SyntaxKind.EnumDeclaration) {
4964
- for (const member of (<EnumDeclaration>declaration).members) {
4965
- getSymbolLinks(getSymbolOfNode(member)).declaredType = getLiteralType(getEnumMemberValue(member), enumCount, getSymbolOfNode(member));
4966
- }
4967
- }
4968
- }
4967
+ if (memberTypeList.length) {
4969
4968
const enumType = getUnionType(memberTypeList, /*subtypeReduction*/ false, symbol, /*aliasTypeArguments*/ undefined);
4970
- enumType.flags |= TypeFlags.EnumLiteral;
4971
- enumType.symbol = symbol;
4969
+ if (enumType.flags & TypeFlags.Union) {
4970
+ enumType.flags |= TypeFlags.EnumLiteral;
4971
+ enumType.symbol = symbol;
4972
+ }
4972
4973
return links.declaredType = enumType;
4973
4974
}
4974
4975
}
0 commit comments