Alias de tipo circular
Type alias 'Loop' circularly references itself.Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.
El alias se define en términos de sí mismo sin nada en medio, así que no hay punto alguno en el que signifique algo.
Reproducción
type Loop = LoopLa compilación afirma que esto emite exactamente este código.
Por qué lo dice el compilador
Un tipo recursivo está bien — el archivo está lleno de ellos — pero la recursión tiene que pasar por algo que la difiera: una propiedad de objeto, un elemento de array, una rama condicional que pueda parar. Una autorreferencia desnuda no tiene ese paso, así que no hay nada que expandir ni nada que terminar. El compilador no rechaza la recursión; señala que esto no es recursión, es una definición que se devora a sí misma.
Arreglos
- 01
type Loop = { next: Loop } declare const chain: Loop const deep = chain.next.next
Pon la referencia detrás de una propiedad. Los tipos de objeto son perezosos, así que `Loop` dentro de `{ next: … }` solo se expande cuando algo lo alcanza.
- 02
type Nested<T> = T extends [infer Head, ...infer Rest] ? Head | Nested<Rest> : never type Flat = Nested<[1, 2, 3]>
O recursa a través de un condicional que pueda llegar a un caso base. Cada paso aquí quita un elemento, así que la expansión tiene garantizado detenerse.
Conclusión
La recursión necesita un sitio donde pausar y un sitio donde parar. Un alias que solo se nombra a sí mismo no tiene ninguno.