Cómo aprobar una entrevista de TypeScript: las mejores preguntas de nivel avanzado

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo aprobar una entrevista de TypeScript: las mejores preguntas de nivel avanzado

\n\n

Una entrevista para un puesto de desarrollador Senior Frontend o Fullstack rara vez se queda sin preguntas profundas sobre TypeScript. Si conoces al dedillo los tipos e interfaces básicos, para superar una technical interview de alto nivel necesitas entender el sistema de tipos avanzado. En este artículo hemos recopilado las 5 preguntas y problemas principales que suelen hacer en las entrevistas de TypeScript de nivel avanzado. Cada punto incluye un análisis y ejemplos de código.

\n\n

1. Tipos condicionales (Conditional Types) y la palabra clave infer

\n\n

Los tipos condicionales permiten crear tipos que dependen de una condición. Combinados con infer, puedes "extraer" partes de tipos, como en Pattern Matching.

\n\n

Pregunta: Escribe el tipo ReturnType (sin usar el incorporado).

\n\n

Análisis: Usamos un tipo condicional con infer para capturar el valor de retorno de una función.

\n\n
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never;\n\n// Ejemplo de uso\nfunction greet(name: string): string {\n  return `Hello, ${name}`;\n}\n\ntype GreetReturn = MyReturnType<typeof greet>; // string
\n\n

Cómo responder en la entrevista: Explica que infer R crea una nueva variable de tipo R que captura el tipo de retorno de la firma de la función. Si la condición no se cumple (no se pasa una función), el tipo se convierte en never.

\n\n

2. Mapped Types y modificadores

\n\n

Los Mapped Types permiten crear nuevos tipos transformando las propiedades de uno existente. El nivel avanzado implica trabajar con los modificadores +, -, as y las claves mediante keyof.

\n\n

Pregunta: Crea el tipo DeepReadonly, que hace que todas las propiedades de un objeto (incluidas las anidadas) sean readonly.

\n\n
type DeepReadonly<T> = {\n  readonly [K in keyof T]: T[K] extends Record<string, unknown> \n    ? DeepReadonly<T[K]> \n    : T[K];\n};\n\ninterface User {\n  name: string;\n  address: {\n    city: string;\n    zip: number;\n  };\n}\n\ntype ReadonlyUser = DeepReadonly<User>;\n// Todas las propiedades se vuelven readonly, incluyendo address.city
\n\n

Cómo responder: Muestra la llamada recursiva de DeepReadonly para objetos anidados. Explica cómo se usa Record<string, unknown> para verificar si el valor es un objeto.

\n\n

3. Template Literal Types

\n\n

Los Template Literal Types permiten manipular tipos de cadena a nivel de compilación. Es una herramienta potente para crear APIs estrictas.

\n\n

Pregunta: Implementa el tipo EventName, que toma una cadena y devuelve el tipo "on{Cadena}" con el Capitalize correcto.

\n\n
type EventName<T extends string> = `on${Capitalize<T>}`;\n\ntype ClickEvent = EventName<'click'>; // "onClick"\ntype FocusEvent = EventName<'focus'>; // "onFocus"\n\n// Ejemplo avanzado: extracción de una cadena\ntype ExtractAction<T extends string> = \n  T extends `on${infer Action}` ? Uncapitalize<Action> : never;\n\ntype Action = ExtractAction<'onSubmit'>; // "submit"
\n\n

Cómo responder: Señala los tipos incorporados Capitalize y Uncapitalize. Muestra cómo funciona infer dentro de los template literals para analizar cadenas.

\n\n

4. Genéricos con restricciones y Variadic Tuple Types

\n\n

Los Variadic Tuple Types (aparecieron en TS 4.0) permiten trabajar con tuplas de longitud arbitraria. Son indispensables para crear funciones type-safe con un número variable de argumentos.

\n\n

Pregunta: Escribe un tipo para la función

Blogs

Book Recommendations