Merge pull request #49912 from microsoft/fix/47508

fix(47508): noUncheckedIndexedAccess with enums Type narrowed
This commit is contained in:
navya9singh
2022-09-26 09:47:33 -07:00
committed by GitHub
5 changed files with 274 additions and 1 deletions

View File

@@ -15814,7 +15814,18 @@ namespace ts {
return accessFlags & AccessFlags.IncludeUndefined ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
}
errorIfWritingToReadonlyIndex(indexInfo);
return accessFlags & AccessFlags.IncludeUndefined ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
// When accessing an enum object with its own type,
// e.g. E[E.A] for enum E { A }, undefined shouldn't
// be included in the result type
if ((accessFlags & AccessFlags.IncludeUndefined) &&
!(objectType.symbol &&
objectType.symbol.flags & (SymbolFlags.RegularEnum | SymbolFlags.ConstEnum) &&
(indexType.symbol &&
indexType.flags & TypeFlags.EnumLiteral &&
getParentOfSymbol(indexType.symbol) === objectType.symbol))) {
return getUnionType([indexInfo.type, undefinedType]);
}
return indexInfo.type;
}
if (indexType.flags & TypeFlags.Never) {
return neverType;