@@ -9864,13 +9864,13 @@ namespace ts {
9864
9864
return type.flags & TypeFlags.Union ? getIntersectionType(map((<IntersectionType>type).types, t => getIndexType(t, stringsOnly, noIndexSignatures))) :
9865
9865
type.flags & TypeFlags.Intersection ? getUnionType(map((<IntersectionType>type).types, t => getIndexType(t, stringsOnly, noIndexSignatures))) :
9866
9866
maybeTypeOfKind(type, TypeFlags.InstantiableNonPrimitive) ? getIndexTypeForGenericType(<InstantiableType | UnionOrIntersectionType>type, stringsOnly) :
9867
- getObjectFlags(type) & ObjectFlags.Mapped ? filterType(getConstraintTypeFromMappedType(<MappedType>type), t => !(noIndexSignatures && t.flags & (TypeFlags.Any | TypeFlags.String | TypeFlags.Number ))) :
9867
+ getObjectFlags(type) & ObjectFlags.Mapped ? filterType(getConstraintTypeFromMappedType(<MappedType>type), t => !(noIndexSignatures && t.flags & (TypeFlags.Any | TypeFlags.String))) :
9868
9868
type === wildcardType ? wildcardType :
9869
9869
type.flags & TypeFlags.Unknown ? neverType :
9870
9870
type.flags & (TypeFlags.Any | TypeFlags.Never) ? keyofConstraintType :
9871
9871
stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? stringType : getLiteralTypeFromProperties(type, TypeFlags.StringLiteral) :
9872
9872
!noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, TypeFlags.UniqueESSymbol)]) :
9873
- !noIndexSignatures && getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol)]) :
9873
+ getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol)]) :
9874
9874
getLiteralTypeFromProperties(type, TypeFlags.StringOrNumberLiteralOrUnique);
9875
9875
}
9876
9876
@@ -9988,10 +9988,10 @@ namespace ts {
9988
9988
if (objectType.flags & (TypeFlags.Any | TypeFlags.Never)) {
9989
9989
return objectType;
9990
9990
}
9991
- const indexInfo = isTypeAssignableToKind(indexType, TypeFlags.NumberLike) && getIndexInfoOfType(objectType, IndexKind.Number) ||
9992
- getIndexInfoOfType(objectType, IndexKind.String) ;
9991
+ const stringIndexInfo = getIndexInfoOfType(objectType, IndexKind.String);
9992
+ const indexInfo = isTypeAssignableToKind(indexType, TypeFlags.NumberLike) && getIndexInfoOfType(objectType, IndexKind.Number) || stringIndexInfo ;
9993
9993
if (indexInfo) {
9994
- if (accessFlags & AccessFlags.NoIndexSignatures) {
9994
+ if (accessFlags & AccessFlags.NoIndexSignatures && indexInfo === stringIndexInfo ) {
9995
9995
if (accessExpression) {
9996
9996
error(accessExpression, Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
9997
9997
}
0 commit comments