Писал ли рекурсивные типы в TypeScript

«Писал ли рекурсивные типы в TypeScript» — вопрос из категории TypeScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, рекурсивные типы в TypeScript позволяют описывать структуры, которые ссылаются сами на себя. Например, для представления древовидной структуры данных:

type TreeNode<T> = {
  value: T;
  children: TreeNode<T>[];
};

const tree: TreeNode<string> = {
  value: 'root',
  children: [
    {
      value: 'child1',
      children: []
    },
    {
      value: 'child2',
      children: [
        { value: 'grandchild', children: [] }
      ]
    }
  ]
};

Также можно создавать рекурсивные типы для JSON-подобных структур:

type JsonValue = string | number | boolean | null | JsonObject | JsonArray;
type JsonObject = { [key: string]: JsonValue };
type JsonArray = JsonValue[];

Важно следить за глубиной рекурсии, так как TypeScript имеет ограничения на обработку слишком глубоких рекурсивных типов.