devtypes - v2.0.0
    Preparing search index...

    Type Alias IsTypeRecursive<T, P>

    IsTypeRecursive: T extends any[]
        ? false
        : T extends { [key: string]: any }
            ? {
                [K in keyof T]: IsTypeExtendedInList<T[K], P> extends true
                    ? true
                    : IsTypeRecursive<T[K], [...P, T]>
            }[keyof T] extends false
                ? false
                : true
            : IsTypeExtendedInList<T, P>

    Type Guard: detect if a type is recursive.

    Type Parameters

    • T

      A type to be inspected

    • P extends any[] = []

      (Optional) The list of parents types

    Recursively inspects the structure of T to detect if a type is recursive.

    Potentially recursive types, such as union types with a parent type, are considered recursion.

    true if T is recursive. false if T is not recursive. boolean if T is a union type with a recursive type.

    type RecursiveType = { r: RecursiveType };
    type Recursive = IsTypeRecursive< RecursiveType >; // true

    type PotentialRecursiveType = { r: PotentialRecursiveType | null };
    type PotentialRecursive = IsTypeRecursive< PotentialRecursiveType >; // true
    type IsNotRecursive = IsTypeRecursive< { a: { a: { a: { a: { a: 'a' } } } } } >; // false