Cómo aprobar una entrevista de TypeScript: las mejores preguntas de nivel avanzado
\n\nUna 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\n1. Tipos condicionales (Conditional Types) y la palabra clave infer
\n\nLos tipos condicionales permiten crear tipos que dependen de una condición. Combinados con infer, puedes "extraer" partes de tipos, como en Pattern Matching.
Pregunta: Escribe el tipo ReturnType (sin usar el incorporado).
Análisis: Usamos un tipo condicional con infer para capturar el valor de retorno de una funció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\nCó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.
2. Mapped Types y modificadores
\n\nLos 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.
Pregunta: Crea el tipo DeepReadonly, que hace que todas las propiedades de un objeto (incluidas las anidadas) sean readonly.
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\nCó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.
3. Template Literal Types
\n\nLos Template Literal Types permiten manipular tipos de cadena a nivel de compilación. Es una herramienta potente para crear APIs estrictas.
\n\nPregunta: Implementa el tipo EventName, que toma una cadena y devuelve el tipo "on{Cadena}" con el Capitalize correcto.
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\nCómo responder: Señala los tipos incorporados Capitalize y Uncapitalize. Muestra cómo funciona infer dentro de los template literals para analizar cadenas.
4. Genéricos con restricciones y Variadic Tuple Types
\n\nLos 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\nPregunta: Escribe un tipo para la función
Blogs
Book Recommendations
Leer también
Go y ChatGPT: creando un asistente de IA para desarrollo en Golang
Expresiones regulares en C++: guía completa con ejemplos
undefined o null en JavaScript: cómo verificar una variable en 2025
Escritura de documentación para proyectos Swift: de la A a la Z
Cómo aprobar una entrevista de C++: preguntas y respuestas principales