Skip to content

⬅️ 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