Skip to content

⬅️ Back to Table of Contents

📄 discriminateAnyType

📊 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

Returns: undefined 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.

Raw 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`.
 */

Calls:

  • discriminateAnyTypeWorker
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());
}

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

Parameters:

  • type ts.Type
  • checker ts.TypeChecker
  • program ts.Program
  • tsNode ts.Node
  • visited Set<ts.Type>

Returns: AnyType

Calls:

  • visited.has
  • visited.add
  • isTypeAnyType (from ./predicates)
  • isTypeAnyArrayType (from ./predicates)
  • tsutils.typeConstituents
  • tsutils.isThenableType
  • checker.getAwaitedType
  • discriminateAnyTypeWorker
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;
}

Enums

enum AnyType

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

Members

Name Value Description
Any auto not shown
PromiseAny auto not shown
AnyArray auto not shown
Safe auto not shown

Generated by Syntax Scribe