typestar

Tipos recursivos en TypeScript

Un tipo que se refiere a sí mismo, que es como se tipan JSON y los árboles.

type Json =
  | string
  | number
  | boolean
  | null
  | Json[]
  | { [key: string]: Json };

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

type Paths<T> = T extends object
  ? { [K in keyof T & string]: K | `${K}.${Paths<T[K]>}` }[keyof T & string]
  : never;

type Config = { server: { port: number; host: string }; debug: boolean };
type ConfigPath = Paths<Config>;

const document: Json = { runs: [{ lang: "ts", tpm: 98 }], ok: true };
const tree: TreeNode<string> = {
  value: "root",
  children: [{ value: "leaf", children: [] }],
};
const path: ConfigPath = "server.port";
console.log(typeof document, tree.children.length, path);

Cómo funciona

  1. La recursión debe pasar por un objeto, un arreglo o una unión.
  2. Un límite de profundidad evita que el compilador se rinda.
  3. Este es el tipo honesto para cualquier cosa con forma de JSON.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
635
Tokens
200
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 109 segundos.

Escribe este fragmento

Paso 2 de 2 en Cadenas y recursión; paso 8 de 12 en Programación a nivel de tipos.

← Anterior Siguiente →