@@ -6444,7 +6444,7 @@ namespace ts {
6444
6444
for (const declaration of symbol.declarations) {
6445
6445
if (declaration.kind === SyntaxKind.EnumDeclaration) {
6446
6446
for (const member of (<EnumDeclaration>declaration).members) {
6447
- const memberType = getFreshTypeOfLiteralType(getLiteralType(getEnumMemberValue(member)! , enumCount, getSymbolOfNode(member))); // TODO: GH#18217
6447
+ const memberType = getFreshTypeOfLiteralType(getLiteralType(getEnumMemberValue(member) || 0 , enumCount, getSymbolOfNode(member)));
6448
6448
getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
6449
6449
memberTypeList.push(getRegularTypeOfLiteralType(memberType));
6450
6450
}
@@ -7453,8 +7453,9 @@ namespace ts {
7453
7453
else if (t.flags & (TypeFlags.Any | TypeFlags.String)) {
7454
7454
stringIndexInfo = createIndexInfo(propType, !!(templateModifiers & MappedTypeModifiers.IncludeReadonly));
7455
7455
}
7456
- else if (t.flags & TypeFlags.Number) {
7457
- numberIndexInfo = createIndexInfo(propType, !!(templateModifiers & MappedTypeModifiers.IncludeReadonly));
7456
+ else if (t.flags & (TypeFlags.Number | TypeFlags.Enum)) {
7457
+ numberIndexInfo = createIndexInfo(numberIndexInfo ? getUnionType([numberIndexInfo.type, propType]) : propType,
7458
+ !!(templateModifiers & MappedTypeModifiers.IncludeReadonly));
7458
7459
}
7459
7460
}
7460
7461
}
@@ -28440,9 +28441,9 @@ namespace ts {
28440
28441
if (member.initializer) {
28441
28442
return computeConstantValue(member);
28442
28443
}
28443
- // In ambient enum declarations that specify no const modifier , enum member declarations that omit
28444
- // a value are considered computed members (as opposed to having auto-incremented values).
28445
- if (member.parent.flags & NodeFlags.Ambient && !isEnumConst(member.parent)) {
28444
+ // In ambient non-const numeric enum declarations , enum members without initializers are
28445
+ // considered computed members (as opposed to having auto-incremented values).
28446
+ if (member.parent.flags & NodeFlags.Ambient && !isEnumConst(member.parent) && getEnumKind(getSymbolOfNode(member.parent)) === EnumKind.Numeric ) {
28446
28447
return undefined;
28447
28448
}
28448
28449
// If the member declaration specifies no value, the member is considered a constant enum member.
0 commit comments