lume.books & ideiasPortfólio
TypeScript — JavaScript com segurança e escala
Capítulo 35/48 · Erros tipados sem falsa promessa
TypeScript — JavaScript com segurança e escalaParte VI — Fronteiras e runtimeCapítulo 35 · Edição de estudo

Use os exemplos como laboratório: leia o código, preveja o resultado e teste no ambiente de prática. Para guardar uma ideia, selecione qualquer trecho.

CAPÍTULO 35 DE 48

Erros tipados sem falsa promessa

Neste capítulo, você transforma erro de domínio em uma decisão de modelagem de tipos que pode ser explicada, testada e revisada. Você sairá com uma implementação pequena, evidências de teste e um critério reutilizável nos projetos seguintes.

Parte VI — Fronteiras e runtime6 questões comentadasConceito · laboratório · projeto

Escrita, marcações e comentários ficam só neste navegador, separados por capítulo e sem sincronização com a conta. Evite informações sensíveis; limpar os dados do navegador pode remover seus registros.

02

Prepare-se — O que você vai construir

  • Explicar erro de domínio sem depender de uma receita decorada.
  • Relacionar cause desconhecida ao contrato e ao fluxo observável.
  • Aplicar mensagem de apresentação em um caso real e em um limite.

Se precisar de apoio, consulte a capítulo anterior e volte a estas tarefas. Não há obrigação de seguir um prazo.

03

Entenda — Modelo mental e estrutura

1. Comece pelo modelo mental

O JavaScript permite lançar qualquer valor, por isso catch deve começar desconhecido. Códigos de domínio podem ser discriminados; detalhes técnicos ficam preservados em cause e logs seguros. Em erro de domínio, a sintaxe é apenas a superfície de um contrato. Relacione essa ideia a cause desconhecida e mensagem de apresentação antes de editar o exemplo. Em software real, uma linha pode compilar e ainda representar uma suposição incorreta sobre dados, tempo, ambiente ou responsabilidade. Por isso, descreva a entrada, a transformação e o resultado observável com palavras simples.

Descreva primeiro o contrato de erro de domínio e como ele se relaciona com cause desconhecida. Implemente a menor versão que revele o mecanismo e mantenha o caminho principal fácil de seguir. Se a solução depende de estado implícito, conversão silenciosa ou ordem acidental, registre essa dependência e procure torná-la explícita. O objetivo não é memorizar uma receita: é reconhecer quando o conceito se aplica, escolher uma abstração proporcional e conseguir explicar o custo dessa escolha.

2. Leia o código como uma sequência de decisões

type Falha = { tipo: 'nao_encontrado'; id: string } | { tipo: 'indisponivel'; retry: boolean };
function mensagem(f: Falha) {
  return f.tipo === 'nao_encontrado' ? 'Item não encontrado' : 'Serviço indisponível';
}

Leia o exemplo de fora para dentro. Primeiro localize os dados e o contrato público; depois acompanhe as transformações; por fim, identifique efeitos, falhas e saídas. O trecho deixa erro de domínio visível no código e permite evoluir mensagem de apresentação sem esconder o fluxo principal. Digite o trecho em vez de apenas copiá-lo. Troque nomes e valores, faça uma hipótese e execute novamente. Essa comparação mostra o que pertence à regra da linguagem ou do framework e o que existe apenas por causa do exemplo.

Observe também o que o código não garante. TypeScript verifica relações antes da execução e apaga os tipos ao emitir JavaScript; dados externos continuam exigindo validação em runtime. Um tipo estático não valida automaticamente uma resposta externa; um componente não substitui semântica; uma abstração não corrige um contrato mal definido. Comentários úteis registram intenção, limite ou motivo. Comentários que repetem a sintaxe não compensam nomes vagos ou responsabilidades misturadas.

3. Converta observação em critério verificável

Uma solução forte torna erro de domínio legível, verifica cause desconhecida com evidência e registra os limites de mensagem de apresentação. Um bom critério descreve contexto, ação e resultado. Em vez de “funcionou”, registre qual entrada foi usada, qual saída era esperada e como uma falha deveria aparecer. Inspecione valores, mensagens e transições no editor, compilador TypeScript 5.9 e testes. Quando houver interface, percorra também com teclado, zoom e tecnologia assistiva; quando houver servidor ou compilação, confira logs, tipos e limites de confiança.

A armadilha central é: usar anotações, any ou as para silenciar o compilador sem demonstrar o contrato de erro de domínio.. Corrija a causa antes de empilhar exceções. Reduza o caso, reproduza o problema, altere uma variável por vez e repita o teste. Ao terminar, você deve conseguir dizer por que a solução funciona, quais suposições preserva, onde pode falhar e que evidência outra pessoa pode usar para revisar a entrega.

04

Analise — Código em contexto

Uma revisão começa pela intenção. Para “Erros tipados sem falsa promessa”, o requisito é: a solução deve demonstrar erro de domínio, preservar cause desconhecida e reagir de forma previsível quando mensagem de apresentação variar. Analise a variação abaixo e preveja o resultado antes de executá-la.

catch (cause: unknown) { throw new Error('Falha ao sincronizar', { cause }); }

A variação isola cause desconhecida. Acompanhe dados, controle e efeitos antes de decidir se o resultado respeita o contrato. Faça quatro passagens. Na primeira, identifique entradas e saídas. Na segunda, siga o fluxo de controle e as transformações. Na terceira, procure valores ausentes, concorrência, mutação e dependências do ambiente. Na quarta, avalie a experiência de erro e a capacidade de testar o trecho isoladamente.

Compare a variação com o exemplo principal. Escolha uma mudança e formule uma hipótese completa: “se eu alterar isto, espero aquilo, porque…”. Execute, observe e registre. A resposta importante não é apenas qual trecho passa no caso feliz, mas qual comunica melhor o contrato, reduz acoplamento e permanece compreensível para quem precisar manter, depurar ou integrar o módulo depois.

05

Construa — Teste cada decisão no ambiente

Crie um laboratório pequeno e executável em editor, compilador TypeScript 5.9 e testes. Reproduza o exemplo, explique cada etapa e crie uma segunda versão que aplique mensagem de apresentação sem perder erro de domínio. Primeiro implemente o caminho principal sem abstrações prematuras. Depois use o depurador, o verificador de tipos, os testes ou as ferramentas de inspeção adequadas para confirmar o fluxo. Por último, force três situações adversas: entrada vazia, volume maior que o esperado e falha controlada em editor, compilador TypeScript 5.9 e testes.

Não corrija todos os sintomas de uma vez. Para cada falha, anote hipótese, evidência e menor mudança. Rode novamente os cenários já aprovados para detectar regressões. Quando houver mais de uma solução possível, escolha pela clareza do contrato, pela facilidade de teste e pelo custo de mudança. Uma captura ou um log ajuda a documentar, mas código, critérios e testes reproduzíveis continuam sendo a fonte principal da entrega.

06

Pratique — Seis decisões de implementação

Resolva primeiro pelo raciocínio. Consultar o capítulo e testar hipóteses no navegador faz parte do processo; depois, releia as justificativas.

E1 — Aplicar em contexto

Qual decisão inicia corretamente o trabalho de “Erros tipados sem falsa promessa”?

E2 — Aplicar em contexto

Qual verificação oferece a evidência mais forte para este capítulo?

E3 — Aplicar em contexto

Qual prática deve ser evitada nesta implementação?

E4 — Aplicar em contexto

Qual escolha protege melhor quem usa ou integra o recurso?

E5 — Aplicar em contexto

Ao investigar um resultado inesperado, qual sequência é mais confiável?

E6 — Aplicar em contexto

Quando a entrega pode ser considerada pronta para revisão?

07

Confira — Gabarito comentado

Abrir gabarito e explicações completas

E1 — B. A implementação começa pelo contrato observável. Descreva primeiro o contrato de erro de domínio e como ele se relaciona com cause desconhecida. Assim, a sintaxe passa a servir a uma decisão que pode ser revisada.

E2 — A. A evidência precisa exercitar o mecanismo estudado. Executar o caminho principal e os limites de cause desconhecida, observando o resultado de mensagem de apresentação. O caso feliz isolado não revela limites nem recuperação.

E3 — C. A armadilha é usar anotações, any ou as para silenciar o compilador sem demonstrar o contrato de erro de domínio. Ela oculta o mecanismo e amplia o risco de regressão quando dados ou requisitos mudam.

E4 — B. A alternativa correta inclui pessoas e integrações no contrato: Manter nomes, estados, foco e mensagens compreensíveis quando erro de domínio chegar à interface. Estados e limites precisam permanecer compreensíveis.

E5 — A. A sequência baseada em evidência relaciona causa e efeito. Mudanças amplas escondem o mecanismo e dificultam perceber regressões.

E6 — C. Pronto para revisão significa atender critérios observáveis. O contrato de erro de domínio está explícito, cause desconhecida foi exercitado e a falha de mensagem de apresentação produz um estado compreensível. Outra pessoa ainda pode encontrar melhorias, mas consegue reproduzir a evidência.

08

Projete — Implemente, compare e refine

Entrega incremental: um laboratório de erros tipados sem falsa promessa com contrato público, casos aceitos, rejeições do compilador e nota sobre runtime. Comece descrevendo, em até cinco linhas, quem usa o recurso e qual tarefa precisa concluir. Separe domínio, entrada e apresentação conforme a escala do problema. Inclua um caso real, um limite e uma falha recuperável. Ao final, escreva uma nota técnica explicando onde aplicou erro de domínio, como verificou cause desconhecida e qual limite encontrou em mensagem de apresentação.

Consultar um modelo possível
type Falha = { tipo: 'nao_encontrado'; id: string } | { tipo: 'indisponivel'; retry: boolean };
function mensagem(f: Falha) {
  return f.tipo === 'nao_encontrado' ? 'Item não encontrado' : 'Serviço indisponível';
}

O modelo ilustra uma possibilidade. Use os critérios para revisar suas próprias ideias, não para copiar as mesmas frases.

Critérios para revisar

  • O contrato de erro de domínio está explícito, cause desconhecida foi exercitado e a falha de mensagem de apresentação produz um estado compreensível.
  • Manter nomes, estados, foco e mensagens compreensíveis quando erro de domínio chegar à interface.
  • O código evidencia erro de domínio e cause desconhecida sem estado acidental.
  • A nota técnica registra o teste de entrada vazia, volume maior que o esperado e falha controlada em editor, compilador TypeScript 5.9 e testes.

Até 12.000 caracteres em cada versão. Produção livre, sem correção automática.

09

Retome — Organize sua revisão

  • Explique com suas palavras a relação entre erro de domínio e cause desconhecida.
  • Reabra o laboratório sem consultar o texto e reconstrua a decisão ligada a mensagem de apresentação.
  • Aplique o teste “Executar o caminho principal e os limites de cause desconhecida, observando o resultado de mensagem de apresentação.” ao projeto acumulado e registre uma melhoria.

Feche a explicação, tente lembrar um exemplo e depois confira. Retome uma dificuldade no próximo encontro e alguns dias depois; ajuste o intervalo ao que ainda precisa praticar.

Use exemplos concretos na autoavaliação: “consigo explicar com consulta” ou “quero praticar novamente”. Marcar como lida não representa uma certificação.

SEU PROGRESSO NO CAPÍTULO 35

Um capítulo, no seu ritmo.

— exercícios respondidos

Carregando progresso…

Você decide quando marcar este capítulo como lido. Isso não altera seus exercícios nem suas marcações.

Acompanhar todos os capítulos →

Progresso salvo só neste navegador, sem sincronização com sua conta.

Guardar uma ideia

Cor e significado

Você pode personalizar os significados no seu caderno.

Salvo só neste navegador, sem sincronização com a conta. Evite informações sensíveis em computadores compartilhados.

Do seu jeito de ler

Encontre o ritmo mais confortável para seus olhos.

Ambiente
Tipografia
Tamanho do texto
Entrelinhas
Largura da leitura

Preferências salvas neste navegador. O progresso indica a posição na página, não o domínio do conteúdo.

Seções do Capítulo 35