trilha

Tecnologias/01 - Linguagens/02 - TypeScript2 min

TypeScript

Definição

TypeScript acrescenta um sistema de tipos estáticos ao JavaScript. Ele verifica a compatibilidade entre valores e operações antes da execução: uma função que recebe number pode rejeitar uma chamada que passe string.

JavaScript continua definindo o comportamento do programa em execução: objetos, funções, coerções, exceções e Promises seguem suas regras. TypeScript ajuda a detectar inconsistências nos contratos declarados. Referência: Handbook.

Verificação e execução

Anotações como : number, interfaces e aliases de tipos são apagadas na transformação para JavaScript. O ambiente executa o código resultante. Alguns ambientes também aceitam certos arquivos TypeScript diretamente, removendo a sintaxe de tipos; essa remoção, sozinha, não equivale à verificação estática.

function subtotal(preco: number, quantidade: number): number {
  return preco * quantidade;
}

console.log(subtotal(12, 3)); // 36

O JavaScript correspondente não precisa das anotações:

function subtotal(preco, quantidade) {
  return preco * quantidade;
}

Declarar um tipo não acrescenta automaticamente um if para conferir argumentos. Por isso, dados recebidos de uma API ainda exigem validação. Referência: The Basics.

Inferência

O compilador consegue deduzir tipos a partir dos valores e do contexto. Em let total = 10, ele infere number. Anotar explicitamente é útil para tornar o contrato de uma função ou objeto visível, mesmo quando a inferência seria suficiente.

Limitações

A verificação trabalha com as informações disponíveis. Um tipo declarado incorretamente, uma biblioteca com definições imprecisas ou o uso de any pode deixar um erro passar. O código também pode compilar e estar logicamente errado: multiplicar pelo desconto errado é um erro de regra de negócio, mesmo que todos os valores sejam números.

Aprofundamento aplicado

Modelar o domínio antes de anotar variáveis

Considere uma API que calcula frete. peso: number impede passar texto, mas aceita -4, NaN e um valor em gramas quando a função espera quilogramas. O tipo primitivo representa a forma do dado; a regra do domínio precisa restringir os valores e a unidade.

Uma sequência útil é: receber unknown, validar, converter para uma representação interna e executar a regra. Isso concentra suposições nas fronteiras e simplifica o núcleo.

Etapa Exemplo de erro detectado
Verificação estática Chamar a função com um objeto sem pesoKg
Validação de entrada Receber peso negativo ou não finito
Teste de domínio Aplicar a faixa de frete errada para 10 kg
Integração Transportadora responder em unidade diferente

Acesso a coleções também pode falhar

Com noUncheckedIndexedAccess, uma leitura como valores[0] considera a possibilidade de não existir elemento. Isso obriga a decidir o comportamento do array vazio. Essa opção é separada de strict. Documentação da opção.

Exercício: descreva o contrato de uma função de média. Para a entrada vazia, escolha explicitamente erro ou ausência de resultado. Resultado esperado: o contrato não promete um número utilizável quando a divisão produziria NaN.

Relacionado: 3. Tipos, Interfaces e Objetos em TypeScript · 8. Validação de Dados em TypeScript.


Parte de TypeScript

Buscar

Busca por título, seção e texto das notas