Solución comentada
Publicado el 8 de septiembre de 2026La solución
type First<T extends readonly unknown[]> = T extends [infer H, ...unknown[]] ? H : neverEl error más común
type First<T extends readonly unknown[]> = T extends [infer H] ? H : neverUn patrón de un elemento coincide con tuplas de un elemento y con nada más. First<[string]> funciona, First<[1, 2, 3]> cae directo a never, y el puzle parece medio resuelto porque una comprobación pasa. El patrón tiene que decir «y luego cualquier cosa».
Línea por línea
[infer H, ...unknown[]]El resto se expande como
unknown[]en vez de inferirse, porque aquí nada lo necesita. Nombrar lo que no vas a usar es la forma más común de que estos patrones se vuelvan más difíciles de leer de lo que son.: neverneveres la respuesta honesta a «no existe tal elemento» — noundefined, que afirmaría que el elemento existe y que falta su valor.
Para recordar
Los patrones de tupla son exactos. [H] significa «una tupla de longitud uno», y si querías decir «al menos uno» tienes que escribir el resto.

