MCPcopy Index your code
hub / github.com/nodejs/node / checkIndexedAccessIndexType

Function checkIndexedAccessIndexType

test/fixtures/snapshot/typescript.js:80765–80797  ·  view source on GitHub ↗
(type, accessNode)

Source from the content-addressed store, hash-verified

80763 getTypeFromTypeNode(node);
80764 }
80765 function checkIndexedAccessIndexType(type, accessNode) {
80766 if (!(type.flags & 8388608 /* TypeFlags.IndexedAccess */)) {
80767 return type;
80768 }
80769 // Check if the index type is assignable to 'keyof T' for the object type.
80770 var objectType = type.objectType;
80771 var indexType = type.indexType;
80772 if (isTypeAssignableTo(indexType, getIndexType(objectType, /*stringsOnly*/ false))) {
80773 if (accessNode.kind === 207 /* SyntaxKind.ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
80774 ts.getObjectFlags(objectType) & 32 /* ObjectFlags.Mapped */ && getMappedTypeModifiers(objectType) & 1 /* MappedTypeModifiers.IncludeReadonly */) {
80775 error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
80776 }
80777 return type;
80778 }
80779 // Check if we're indexing with a numeric type and if either object or index types
80780 // is a generic type with a constraint that has a numeric index signature.
80781 var apparentObjectType = getApparentType(objectType);
80782 if (getIndexInfoOfType(apparentObjectType, numberType) && isTypeAssignableToKind(indexType, 296 /* TypeFlags.NumberLike */)) {
80783 return type;
80784 }
80785 if (isGenericObjectType(objectType)) {
80786 var propertyName_1 = getPropertyNameFromIndex(indexType, accessNode);
80787 if (propertyName_1) {
80788 var propertySymbol = forEachType(apparentObjectType, function (t) { return getPropertyOfType(t, propertyName_1); });
80789 if (propertySymbol && ts.getDeclarationModifierFlagsFromSymbol(propertySymbol) & 24 /* ModifierFlags.NonPublicAccessibilityModifier */) {
80790 error(accessNode, ts.Diagnostics.Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter, ts.unescapeLeadingUnderscores(propertyName_1));
80791 return errorType;
80792 }
80793 }
80794 }
80795 error(accessNode, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(objectType));
80796 return errorType;
80797 }
80798 function checkIndexedAccessType(node) {
80799 checkSourceElement(node.objectType);
80800 checkSourceElement(node.indexType);

Callers 2

checkIndexedAccessTypeFunction · 0.85

Calls 12

isTypeAssignableToFunction · 0.85
getIndexTypeFunction · 0.85
getMappedTypeModifiersFunction · 0.85
typeToStringFunction · 0.85
getApparentTypeFunction · 0.85
getIndexInfoOfTypeFunction · 0.85
isTypeAssignableToKindFunction · 0.85
isGenericObjectTypeFunction · 0.85
getPropertyNameFromIndexFunction · 0.85
forEachTypeFunction · 0.85
getPropertyOfTypeFunction · 0.85
errorFunction · 0.70

Tested by

no test coverage detected