⬅️ Back to Table of Contents
📄 no-for-in-array.ts
📊 Analysis Summary
Metric |
Count |
🔧 Functions |
3 |
📦 Imports |
4 |
📚 Table of Contents
🛠️ File Location:
📂 packages/eslint-plugin/src/rules/no-for-in-array.ts
📦 Imports
Name |
Source |
createRule |
../util |
getConstrainedTypeAtLocation |
../util |
getParserServices |
../util |
getForStatementHeadLoc |
../util/getForStatementHeadLoc |
Functions
isArrayLike(checker: ts.TypeChecker, type: ts.Type): boolean
Code
function isArrayLike(checker: ts.TypeChecker, type: ts.Type): boolean {
return isTypeRecurser(
type,
t => t.getNumberIndexType() != null && hasArrayishLength(checker, t),
);
}
- Parameters:
checker: ts.TypeChecker
type: ts.Type
- Return Type:
boolean
- Calls:
isTypeRecurser
t.getNumberIndexType
hasArrayishLength
hasArrayishLength(checker: ts.TypeChecker, type: ts.Type): boolean
Code
function hasArrayishLength(checker: ts.TypeChecker, type: ts.Type): boolean {
const lengthProperty = type.getProperty('length');
if (lengthProperty == null) {
return false;
}
return tsutils.isTypeFlagSet(
checker.getTypeOfSymbol(lengthProperty),
ts.TypeFlags.NumberLike,
);
}
- Parameters:
checker: ts.TypeChecker
type: ts.Type
- Return Type:
boolean
- Calls:
type.getProperty
tsutils.isTypeFlagSet
checker.getTypeOfSymbol
isTypeRecurser(type: ts.Type, predicate: (t: ts.Type) => boolean): boolean
Code
function isTypeRecurser(
type: ts.Type,
predicate: (t: ts.Type) => boolean,
): boolean {
if (type.isUnionOrIntersection()) {
return type.types.some(t => isTypeRecurser(t, predicate));
}
return predicate(type);
}
- Parameters:
type: ts.Type
predicate: (t: ts.Type) => boolean
- Return Type:
boolean
- Calls:
type.isUnionOrIntersection
type.types.some
isTypeRecurser
predicate