Skip to content

Commit 68585f2

Browse files
committed
Ignore string (but keep numeric) index signatures coming from constraints
1 parent 169e485 commit 68585f2

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/compiler/checker.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9864,13 +9864,13 @@ namespace ts {
98649864
return type.flags & TypeFlags.Union ? getIntersectionType(map((<IntersectionType>type).types, t => getIndexType(t, stringsOnly, noIndexSignatures))) :
98659865
type.flags & TypeFlags.Intersection ? getUnionType(map((<IntersectionType>type).types, t => getIndexType(t, stringsOnly, noIndexSignatures))) :
98669866
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))) :
98689868
type === wildcardType ? wildcardType :
98699869
type.flags & TypeFlags.Unknown ? neverType :
98709870
type.flags & (TypeFlags.Any | TypeFlags.Never) ? keyofConstraintType :
98719871
stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? stringType : getLiteralTypeFromProperties(type, TypeFlags.StringLiteral) :
98729872
!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)]) :
98749874
getLiteralTypeFromProperties(type, TypeFlags.StringOrNumberLiteralOrUnique);
98759875
}
98769876

@@ -9988,10 +9988,10 @@ namespace ts {
99889988
if (objectType.flags & (TypeFlags.Any | TypeFlags.Never)) {
99899989
return objectType;
99909990
}
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;
99939993
if (indexInfo) {
9994-
if (accessFlags & AccessFlags.NoIndexSignatures) {
9994+
if (accessFlags & AccessFlags.NoIndexSignatures && indexInfo === stringIndexInfo) {
99959995
if (accessExpression) {
99969996
error(accessExpression, Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
99979997
}

0 commit comments

Comments
 (0)