Skip to content

⬅️ Back to Table of Contents

📄 discriminateAnyType.ts

📊 Analysis Summary

Metric Count
🔧 Functions 2
📦 Imports 2
🎯 Enums 1

📚 Table of Contents

🛠️ File Location:

📂 packages/type-utils/src/discriminateAnyType.ts

📦 Imports

Name Source
isTypeAnyType ./predicates
isTypeAnyArrayType ./predicates

Functions

discriminateAnyType(type: ts.Type, checker: ts.TypeChecker, program: ts.Program, tsNode: ts.Node): AnyType

Code
export function discriminateAnyType(
  type: ts.Type,
  checker: ts.TypeChecker,
  program: ts.Program,
  tsNode: ts.Node,
): AnyType {
  return discriminateAnyTypeWorker(type, checker, program, tsNode, new Set());
}
  • JSDoc:

    /**
     * @returns `AnyType.Any` if the type is `any`, `AnyType.AnyArray` if the type is `any[]` or `readonly any[]`, `AnyType.PromiseAny` if the type is `Promise<any>`,
     *          otherwise it returns `AnyType.Safe`.
     */
    

  • Parameters:

  • type: ts.Type
  • checker: ts.TypeChecker
  • program: ts.Program
  • tsNode: ts.Node
  • Return Type: AnyType
  • Calls:
  • discriminateAnyTypeWorker

discriminateAnyTypeWorker(type: ts.Type, checker: ts.TypeChecker, program: ts.Program, tsNode: ts.Node, visited: Set<ts.Type>): AnyType

Code
function discriminateAnyTypeWorker(
  type: ts.Type,
  checker: ts.TypeChecker,
  program: ts.Program,
  tsNode: ts.Node,
  visited: Set<ts.Type>,
) {
  if (visited.has(type)) {
    return AnyType.Safe;
  }
  visited.add(type);
  if (isTypeAnyType(type)) {
    return AnyType.Any;
  }
  if (isTypeAnyArrayType(type, checker)) {
    return AnyType.AnyArray;
  }
  for (const part of tsutils.typeConstituents(type)) {
    if (tsutils.isThenableType(checker, tsNode, part)) {
      const awaitedType = checker.getAwaitedType(part);
      if (awaitedType) {
        const awaitedAnyType = discriminateAnyTypeWorker(
          awaitedType,
          checker,
          program,
          tsNode,
          visited,
        );
        if (awaitedAnyType === AnyType.Any) {
          return AnyType.PromiseAny;
        }
      }
    }
  }

  return AnyType.Safe;
}
  • Parameters:
  • type: ts.Type
  • checker: ts.TypeChecker
  • program: ts.Program
  • tsNode: ts.Node
  • visited: Set<ts.Type>
  • Return Type: AnyType
  • Calls:
  • visited.has
  • visited.add
  • isTypeAnyType (from ./predicates)
  • isTypeAnyArrayType (from ./predicates)
  • tsutils.typeConstituents
  • tsutils.isThenableType
  • checker.getAwaitedType
  • discriminateAnyTypeWorker

Enums

enum AnyType

Enum Code
export enum AnyType {
  Any,
  PromiseAny,
  AnyArray,
  Safe,
}

Members

Name Value Description
Any auto
PromiseAny auto
AnyArray auto
Safe auto