Menu

TypeScript: o que é e para que serve? Guia para iniciantes

O que é TypeScript? É JavaScript com tipos estáticos. Você anota os valores com tipos, o compilador verifica tudo antes de o código rodar e a saída é JavaScript puro, que roda em qualquer navegador ou no Node.js, Deno e Bun.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

O que é TypeScript? TypeScript é JavaScript com tipos estáticos. Você adiciona anotações de tipo a variáveis, parâmetros e valores de retorno, o compilador do TypeScript as verifica antes de o programa rodar e gera JavaScript puro, sem os tipos. Esse JavaScript roda em qualquer lugar onde JavaScript roda: navegadores, Node.js, Deno e Bun. Em resumo, TypeScript, o que é: a mesma linguagem que você já conhece, com uma camada de tipos verificada pelo compilador.

Aqui está um pequeno programa em TypeScript. Clique em Run.

Saída:

Ada is 36 years old
82.33333333333333

Tirando as partes depois dos dois-pontos (: string, : User, : number[]) e a interface, isto é JavaScript. Essas adições dizem ao compilador o que cada valor pode ser. Repare que total não tem anotação: o TypeScript descobre sozinho que é um número. A maior parte do código TypeScript anota as fronteiras das funções e deixa o compilador inferir o resto.

O que o verificador de tipos detecta

O objetivo das anotações é que os erros apareçam enquanto você escreve o código, e não quando um usuário esbarra neles. Rode este bloco e leia a saída:

O programa nem começa. Em vez disso, o compilador mostra dois erros:

index.ts(11,38): error TS2322: Type 'string' is not assignable to type 'number'.
index.ts(12,22): error TS2741: Property 'age' is missing in type '{ name: string; }' but required in type 'User'.

Cada erro indica o arquivo, a linha e a coluna, um código de erro (TS2322) e o que está errado. Em JavaScript puro, as duas linhas rodariam, e a segunda imprimiria Linus is undefined years old sem nenhum aviso. Em um editor como o VS Code, os mesmos erros aparecem sublinhados em vermelho enquanto você digita, junto com um autocompletar que sabe que user tem exatamente um name e um age.

Bugs típicos que o verificador pega:

  • Um nome de propriedade ou método digitado errado (user.nmae, list.lenght).
  • Chamar uma função com argumentos de menos ou de mais, ou com argumentos do tipo errado.
  • Usar um valor que pode ser null ou undefined sem verificá-lo antes.
  • Esquecer de tratar um caso de uma union como "loading" | "done" | "error", quando o código usa uma verificação exaustiva.
  • Código que quebra quando uma função da qual você depende muda de assinatura.

Os tipos desaparecem em tempo de execução

Os tipos do TypeScript existem só em tempo de compilação. O compilador os verifica e depois os remove: o JavaScript gerado não tem anotações nem interfaces e roda exatamente como um JavaScript escrito à mão.

Esta entrada:

function double(n: number): number {
    return n * 2;
}

vira esta saída:

function double(n) {
    return n * 2;
}

Por isso o TypeScript não consegue verificar valores que chegam enquanto o programa roda. Aqui o texto JSON diz ser um User, o compilador precisa confiar nisso e nada reclama em tempo de execução também:

Saída:

string
thirty-six1

Dados de fora do programa (respostas de API, entrada de formulários, arquivos) precisam de uma verificação em tempo de execução, por exemplo uma função type guard que inspeciona o valor. O TypeScript então confia na verificação e faz o narrowing do tipo para você.

Quem criou o TypeScript e por quê

O TypeScript foi criado na Microsoft, com Anders Hejlsberg (o criador do C#) liderando o design. Foi lançado ao público em outubro de 2012 como versão 0.8, e a 1.0 veio em abril de 2014. É open source sob a licença Apache 2.0 e desenvolvido no GitHub. Pela contagem de contribuidores mensais do GitHub, o TypeScript se tornou a linguagem mais usada no GitHub em agosto de 2025, à frente de Python e JavaScript.

A motivação eram as grandes bases de código JavaScript. O JavaScript não tem como dizer "esta função recebe um objeto de usuário", então renomear uma propriedade ou mudar uma função significava procurar no código inteiro e torcer para que os testes cobrissem todas as chamadas. O TypeScript acrescenta essa informação mantendo compatibilidade total com o JavaScript:

  • É um superconjunto. JavaScript válido é sintaxe TypeScript válida, então um projeto pode migrar um arquivo por vez.
  • Segue o JavaScript. Tirando algumas adições antigas como enum e namespace, o TypeScript não acrescenta recursos de tempo de execução próprios; a sintaxe nova vem do padrão JavaScript.
  • Os tipos não custam nada em tempo de execução. Eles são apagados, então a saída é tão rápida quanto JavaScript escrito à mão.

A versão principal atual é o TypeScript 7, cujo compilador foi reescrito em Go como programa nativo e verifica tipos de projetos grandes cerca de dez vezes mais rápido que o compilador em JavaScript que ele substituiu. A página do TypeScript 7 explica o que mudou.

Para que serve o TypeScript? Frontend e backend

O TypeScript é usado para os mesmos softwares que o JavaScript, tanto no frontend quanto no backend. Como a saída é JavaScript, o TypeScript vai aonde o JavaScript vai:

OndeComo o TypeScript roda ali
Front ends no navegadorUma ferramenta de build (Vite, webpack, esbuild) compila para JavaScript. React, Angular, Vue e Svelte têm suporte; projetos Angular são TypeScript por padrão.
Servidores e scripts Node.jsCompile com tsc e rode a saída .js, ou rode arquivos .ts diretamente: as versões atuais do Node.js removem os tipos por conta própria.
DenoRoda arquivos .ts diretamente; deno check verifica os tipos.
BunRoda arquivos .ts diretamente, sem verificar tipos.
Desktop e mobileElectron, React Native e ferramentas parecidas aceitam TypeScript.

A mesma linguagem cobre os dois lados de uma aplicação web, e por isso muitos times compartilham definições de tipo (por exemplo o formato de uma resposta de API) entre o código do servidor e o do navegador.

Como o código TypeScript vira JavaScript

São duas tarefas separadas, e ferramentas diferentes cuidam de cada uma:

  1. Verificação de tipos. Só o compilador do TypeScript faz isso, normalmente pelo comando tsc (o deno check do Deno roda uma cópia do mesmo compilador). Ele lê seus arquivos .ts, reporta erros e, por padrão, também grava arquivos .js.
  2. Remoção dos tipos. O tsc pode fazer isso, e também ferramentas mais rápidas que pulam a verificação de tipos por completo: esbuild, SWC, Babel e o type stripping embutido no Node.js, no Deno e no Bun.

Uma configuração comum usa uma ferramenta rápida para rodar o código e tsc --noEmit (só verifica, não grava nada) no editor e no CI. Instalar o tsc e rodar um arquivo .ts têm cada um a sua página neste capítulo.

Os recursos principais em um exemplo

O TypeScript do dia a dia usa um conjunto pequeno de recursos. Este bloco reúne os principais:

Saída:

Ada ada@example.com
Ada can log in
Linus is banned
  • Anotações de tipo (name: string) dizem o que uma variável, parâmetro, propriedade ou valor de retorno guarda.
  • Inferência de tipos preenche os tipos que você omite: account recebe o tipo daquilo que first retorna.
  • Interfaces e type aliases (interface Account, type Status) dão nome ao formato dos seus dados.
  • Union types ("active" | "banned", T | undefined) descrevem um valor que é uma entre várias coisas.
  • Narrowing: depois de uma verificação como account !== undefined, o compilador sabe qual caso vale dentro do bloco.
  • Propriedades opcionais (email?: string) podem faltar, então o tipo delas inclui undefined.
  • Generics (first<T>) permitem que uma função ou tipo funcione com muitos tipos mantendo-os ligados: entra um array de Account, sai um Account.

Preciso aprender JavaScript primeiro?

Ajuda, mas dá para aprender os dois ao mesmo tempo. Tudo sobre como o código TypeScript se comporta em tempo de execução (variáveis, funções, objetos, arrays, promises, classes) é JavaScript, e o TypeScript adiciona uma camada que descreve esses valores. Se você já sabe JavaScript, o conteúdo novo é o sistema de tipos: anotações, interfaces, unions, generics e narrowing. Se os dois são novidade, comece pelo básico de valores e funções em JavaScript e acrescente tipos pelo caminho; as mensagens de erro do compilador ensinam bem, porque apontam a linha exata em que um valor é usado do jeito errado.

Uma ordem prática para aprender TypeScript: instale e rode um primeiro arquivo, aprenda os tipos básicos e os tipos de objeto, depois union types e narrowing e, em seguida, funções e generics. Isso cobre a maior parte do código de aplicações.

Perguntas frequentes

O que é TypeScript, em termos simples?

TypeScript é JavaScript com anotações de tipo. Você escreve let count: number = 0 e um compilador verifica que count só é usado como número. Depois o compilador remove as anotações e gera JavaScript comum, então qualquer ambiente que roda JavaScript roda o resultado.

TypeScript é frontend ou backend?

Os dois. TypeScript compila para JavaScript, então vai aonde o JavaScript vai: front ends no navegador (React, Angular, Vue, Svelte), servidores em Node.js, Deno ou Bun, ferramentas de linha de comando e apps desktop feitos com Electron. A verificação de tipos funciona igual em todos eles.

TypeScript é uma linguagem de programação ou um framework?

Uma linguagem de programação. É um superconjunto do JavaScript: todo programa JavaScript é sintaxe TypeScript válida, e o TypeScript adiciona um sistema de tipos por cima. Não é um framework nem uma biblioteca: as anotações de tipo são removidas na compilação e não acrescentam código ao programa.

Quem criou o TypeScript?

A Microsoft. Anders Hejlsberg, que também projetou o C#, liderou o design. O TypeScript foi lançado ao público em outubro de 2012 como versão 0.8 e é open source sob a licença Apache 2.0.

O TypeScript verifica tipos em tempo de execução?

Não. Toda a verificação de tipos acontece na compilação, e os tipos são apagados da saída JavaScript. Se dados de fora do programa (uma resposta de API, um formulário, um arquivo JSON) tiverem o formato errado, o TypeScript não percebe enquanto o programa roda. Valide esses dados com código de tempo de execução, como um type guard.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR