El tipado estructural significa que la compatibilidad se decide por la forma y no por el nombre declarado, así que cualquier objeto con las propiedades correctas satisface el tipo. Eso hace los tipos baratos y componibles, pero también significa que dos conceptos sin relación con la misma forma son intercambiables, así que un userId de tipo string se puede pasar donde se espera un orderId de tipo string. La solución habitual es un tipo con marca o una pequeña envoltura que le dé al valor una forma distinta.
Por qué lo preguntan los entrevistadores
Separa a quien añade anotaciones hasta que dejan de salir subrayados rojos de quien usa el sistema de tipos para prevenir clases enteras de bugs. El entrevistador comprueba si sabes que los tipos se borran en tiempo de ejecución, que la comprobación de propiedades sobrantes solo salta con literales de objeto, y cómo modelar un dominio para que los valores incorrectos no sean representables. Suele derivar en uniones discriminadas y validación en la frontera.
Cómo estructurar tu respuesta
- Define el tipado estructural en una frase y contrástalo con el nominal.
- Da el caso de fallo: dos formas idénticas que significan cosas distintas.
- Explica la solución del tipo con marca o de la envoltura.
- Señala que los tipos desaparecen en tiempo de ejecución, así que las fronteras siguen necesitando validación.
Ejemplo de respuesta
Significa que TypeScript compara formas y no nombres, así que si algo tiene las propiedades correctas es asignable, venga de donde venga. Eso es sobre todo un regalo, porque hace que los tipos se sientan como documentación y no como ceremonia. Donde muerde es cuando dos tipos tienen la misma forma pero son conceptos distintos. Todos mis identificadores eran strings sin más, así que pasar un id de usuario a una función que esperaba un id de pedido compilaba perfectamente y fallaba en producción. Lo arreglé con tipos con marca, una intersección con una etiqueta única que solo puede producir una función constructora, para que el compilador deje de tratarlos como lo mismo. La otra trampa es que los tipos se borran, así que nada comprueba la respuesta de una API en tiempo de ejecución. Parseo todo lo que cruza una frontera con un validador de esquema y dejo que el tipo inferido fluya desde ahí, lo que significa que el tipo y los datos reales no pueden separarse. Y sé que la comprobación de propiedades sobrantes solo aplica a literales de objeto recién creados, lo que explica mucha confusión sobre por qué un campo extra a veces es un error y a veces no.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cómo implementarías un tipo con marca sin coste en tiempo de ejecución?
- ¿Cuándo usas unknown en vez de any y qué te obliga a estrechar el tipo?
- ¿Cómo mantienes honestos los tipos de la API en tiempo de ejecución?
Más preguntas para Desarrollador frontend
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas