Question d'entretien pour Développeur frontend

TypeScript utilise un typage structurel. Qu'est-ce que ça veut dire en pratique, et où est-ce que ça vous mord ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Le typage structurel veut dire que la compatibilité se décide sur la forme, pas sur le nom déclaré, donc tout objet ayant les bonnes propriétés satisfait le type. Ça rend les types peu coûteux et composables, mais ça veut aussi dire que deux concepts sans rapport ayant la même forme sont interchangeables, donc un userId de type string peut être passé là où on attend un orderId de type string. La correction habituelle est un type marqué (branded type) ou un petit wrapper qui donne à la valeur une forme distincte.

Pourquoi les recruteurs posent cette question

Ça sépare ceux qui ajoutent des annotations jusqu'à ce que les soulignements rouges disparaissent de ceux qui se servent du système de types pour empêcher des classes entières de bugs. Le recruteur vérifie si vous savez que les types sont effacés à l'exécution, que le contrôle des propriétés excédentaires ne se déclenche que sur les littéraux d'objet, et comment modéliser un domaine pour que les valeurs fausses soient impossibles à représenter. Ça mène en général aux unions discriminées et à la validation à la frontière.

Comment structurer votre réponse

  • Définissez le typage structurel en une phrase et opposez-le au typage nominal.
  • Donnez le cas de défaillance : deux formes identiques qui veulent dire des choses différentes.
  • Expliquez la correction par type marqué ou par wrapper.
  • Notez que les types disparaissent à l'exécution, donc les frontières ont toujours besoin de validation.

Exemple de réponse

Exemple parlé, à la première personne

Ça veut dire que TypeScript compare des formes, pas des noms, donc si quelque chose a les bonnes propriétés c'est assignable, quelle que soit sa provenance. C'est surtout un cadeau, puisque ça fait ressembler les types à de la documentation plutôt qu'à du cérémonial. Là où ça mord, c'est quand deux types ont la même forme mais désignent des concepts différents. Tous mes identifiants étaient de simples strings, donc passer un identifiant utilisateur à une fonction qui attendait un identifiant de commande compilait parfaitement et échouait en production. J'ai corrigé ça avec des types marqués, une intersection avec une étiquette unique que seule une fonction de construction peut produire, pour que le compilateur cesse de les traiter comme identiques. L'autre piège, c'est que les types sont effacés, donc rien ne vérifie la réponse d'une API à l'exécution. Je parse tout ce qui franchit une frontière avec un validateur de schéma et je laisse le type inféré en découler, ce qui fait que le type et les vraies données ne peuvent pas diverger. Et je sais que le contrôle des propriétés excédentaires ne s'applique qu'aux littéraux d'objet frais, ce qui explique beaucoup de confusion sur le fait qu'un champ en trop est parfois une erreur et parfois non.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Comment implémenteriez-vous un type marqué sans coût à l'exécution ?
  • Quand utilisez-vous unknown plutôt que any, et qu'est-ce qui vous force à restreindre ?
  • Comment gardez-vous les types d'API honnêtes à l'exécution ?

Autres questions pour Développeur frontend

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot