@@ -13701,6 +13701,14 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
13701
13701
}
13702
13702
13703
13703
function forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(type: Type, include: TypeFlags, stringsOnly: boolean, cb: (keyType: Type) => void) {
13704
+ if (isTupleType(type)) {
13705
+ forEachType(getUnionType(getElementTypes(type).map((_, i) => getStringLiteralType("" + i))), cb);
13706
+ return;
13707
+ }
13708
+ if (isArrayType(type)) {
13709
+ cb(numberType);
13710
+ return;
13711
+ }
13704
13712
for (const prop of getPropertiesOfType(type)) {
13705
13713
cb(getLiteralTypeFromProperty(prop, include));
13706
13714
}
@@ -13735,15 +13743,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
13735
13743
const include = keyofStringsOnly ? TypeFlags.StringLiteral : TypeFlags.StringOrNumberLiteralOrUnique;
13736
13744
if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
13737
13745
// We have a { [P in keyof T]: X }
13738
- if (isTupleType(modifiersType)) {
13739
- forEachType(getUnionType(getElementTypes(modifiersType).map((_, i) => getStringLiteralType("" + i))), addMemberForKeyType);
13740
- }
13741
- else if (isArrayType(modifiersType)) {
13742
- addMemberForKeyType(numberType);
13743
- }
13744
- else {
13745
- forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(modifiersType, include, keyofStringsOnly, addMemberForKeyType);
13746
- }
13746
+ forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(modifiersType, include, keyofStringsOnly, addMemberForKeyType);
13747
13747
}
13748
13748
else {
13749
13749
forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
0 commit comments