(type, accessNode)
| 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); |
no test coverage detected