Pergunta de entrevista para Desenvolvedor Frontend

TypeScript tem tipagem estrutural. O que isso significa na prática, e onde isso te morde?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Tipagem estrutural significa que a compatibilidade é decidida pelo formato, não pelo nome declarado, então qualquer objeto com as propriedades certas satisfaz o tipo. Isso torna tipos baratos e componíveis, mas também significa que dois conceitos não relacionados com o mesmo formato são intercambiáveis, então uma string userId pode ser passada onde se espera uma string orderId. A correção usual é um branded type ou um wrapper pequeno que dá ao valor um formato distinto.

Por que os entrevistadores perguntam isso

Isso separa quem adiciona anotações até os rabiscos vermelhos sumirem de quem usa o sistema de tipos para prevenir classes de bugs. O entrevistador checa se você sabe que os tipos são apagados em tempo de execução, que a checagem de propriedades em excesso só dispara em object literals, e como modelar um domínio para que valores errados sejam irrepresentáveis. Normalmente leva a unions discriminadas e validação na fronteira.

Como estruturar sua resposta

  • Defina tipagem estrutural em uma frase e contraste com tipagem nominal.
  • Dê o caso de falha: dois formatos idênticos que significam coisas diferentes.
  • Explique a correção com branded type ou wrapper.
  • Note que os tipos somem em tempo de execução, então fronteiras ainda precisam de validação.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Significa que o TypeScript compara formatos, não nomes, então se algo tem as propriedades certas é atribuível, não importa de onde veio. Isso é quase sempre um presente, já que faz os tipos parecerem documentação em vez de cerimônia. Onde morde é quando dois tipos têm o mesmo formato mas são conceitos diferentes. Todos os meus ids eram strings simples, então passar um id de usuário para uma função que esperava um id de pedido compilava perfeitamente e falhava em produção. Corrigi com branded types, uma interseção com uma tag única que só uma função construtora consegue produzir, para o compilador parar de tratá los como iguais. A outra armadilha é que os tipos são apagados, então nada checa a resposta de uma API em tempo de execução. Eu parseio qualquer coisa que cruza uma fronteira com um validador de schema e deixo o tipo inferido fluir dali, o que significa que o tipo e o dado real não podem divergir. E sei que a checagem de propriedades em excesso só se aplica a object literals novos, o que explica muita confusão sobre por que um campo extra às vezes é erro e às vezes não.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Como você implementaria um branded type sem custo em tempo de execução?
  • Quando você usa unknown em vez de any, e o que te obriga a estreitar o tipo?
  • Como você mantém os tipos da API honestos em tempo de execução?

Mais perguntas para Desenvolvedor Frontend

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot