Menu
Coddy logo textTech

Cheat Sheet de TypeScript

Última atualização

Tipos básicos

Os tipos primitivos e como anotar variáveis.

OperaçãoSintaxe
Stringlet name: string = "Ada";
Númerolet age: number = 25;
Booleanolet ok: boolean = true;
Array de Tlet xs: number[] = [1, 2, 3];
Array genéricolet xs: Array<string> = [];
Tuplalet pair: [string, number] = ["a", 1];
Any (sem tipagem)let x: any = 1;
Unknown (any seguro)let x: unknown = JSON.parse(s);
Void (sem retorno)function log(): void { … }
Never (nunca retorna)function fail(): never { throw … }
Null / undefinedlet n: null = null;

Inferência e anotações de tipo

Quando deixar o TS inferir e quando anotar.

OperaçãoSintaxe
Inferido pelo valorlet count = 0; // number
Anotação explícitalet count: number = 0;
Parâmetro de funçãofunction add(a: number, b: number) { … }
Tipo de retornofunction add(a: number, b: number): number { … }
Arrow functionconst sq = (x: number): number => x * x;
Asserção de tipoconst el = input as HTMLInputElement;
Asserção const (literal)const dirs = ["up", "down"] as const;
Asserção de não-nuloel!.focus();

Interfaces

Descreve o formato de um objeto.

OperaçãoSintaxe
Declararinterface User { id: number; name: string; }
Propriedade opcionalinterface User { age?: number; }
Propriedade readonlyinterface User { readonly id: number; }
Assinatura de métodointerface Logger { log(msg: string): void; }
Estender outra interfaceinterface Admin extends User { role: string; }
Assinatura de índiceinterface Map { [key: string]: number; }
Implementar em uma classeclass Db implements Logger { … }

Type aliases e uniões

Nomeie um tipo e combine tipos com | e &.

OperaçãoSintaxe
Type aliastype ID = string | number;
Alias de objetotype User = { id: number; name: string };
Tipo uniãotype Status = "idle" | "loading" | "done";
Tipo interseçãotype Admin = User & { role: string };
Tipo literaltype Yes = "yes";
Anuláveltype Maybe<T> = T | null | undefined;
Alias de funçãotype Handler = (e: Event) => void;

Funções

Parâmetros tipados, retornos e sobrecargas.

OperaçãoSintaxe
Parâmetro opcionalfunction greet(name?: string) { … }
Parâmetro padrãofunction greet(name = "friend") { … }
Parâmetros restfunction sum(...ns: number[]): number { … }
Tipo de funçãolet fn: (a: number) => number;
Interface chamávelinterface Fn { (x: number): number; }
Assinaturas de sobrecargafunction f(x: string): string; function f(x: number): number; function f(x: any) { return x; }
Retorno void ignoradoconst cb: () => void = () => 42; // ok

Classes

Classes com modificadores de acesso e propriedades de parâmetro.

OperaçãoSintaxe
Declarar uma classeclass User { name: string; }
Construtorconstructor(name: string) { this.name = name; }
Propriedade de parâmetroconstructor(public name: string) {}
Public / private / protectedprivate id: number;
Campo readonlyreadonly id: number;
Membro estáticostatic count = 0;
Getter / setterget name() { return this._name; }
Herançaclass Admin extends User { … }
Classe abstrataabstract class Shape { abstract area(): number; }

Generics

Tipos reutilizáveis parametrizados por outros tipos.

OperaçãoSintaxe
Função genéricafunction id<T>(x: T): T { return x; }
Chamar com tipo explícitoid<string>("hi");
Interface genéricainterface Box<T> { value: T; }
Alias genéricotype Pair<A, B> = [A, B];
Classe genéricaclass Stack<T> { items: T[] = []; }
Restrição com extendsfunction len<T extends { length: number }>(x: T) { return x.length; }
Parâmetro de tipo padrãointerface Box<T = string> { value: T; }
Operador keyoftype K = keyof User; // "id" | "name"
Acesso por índicetype Name = User["name"];

Narrowing

Refine uma união para um único tipo em tempo de execução.

OperaçãoSintaxe
Verificação com typeofif (typeof x === "string") { … }
Verificação com instanceofif (e instanceof Error) { … }
Operador inif ("name" in obj) { … }
Narrowing por igualdadeif (status === "done") { … }
Por veracidadeif (value) { … }
Type guard customizadofunction isUser(x: any): x is User { return "id" in x; }
União discriminadatype Shape = { kind: "sq"; size: number } | { kind: "ci"; r: number };
Exaustividade com neverconst _: never = shape;

Enums

Conjuntos nomeados de constantes.

OperaçãoSintaxe
Enum numéricoenum Direction { Up, Down, Left, Right }
Enum de stringsenum Status { Idle = "IDLE", Done = "DONE" }
Usar um valorlet d: Direction = Direction.Up;
Const enum (inline)const enum Color { Red, Green, Blue }
União de literais (moderno)type Status = "idle" | "done";

Utility types

Helpers embutidos que transformam tipos existentes.

OperaçãoSintaxe
Todas as props opcionaisPartial<User>
Todas as props obrigatóriasRequired<User>
Todas as props readonlyReadonly<User>
Selecionar subconjunto de chavesPick<User, "id" | "name">
Omitir uma ou mais chavesOmit<User, "password">
Objeto com chaves dadasRecord<string, number>
Excluir de uma uniãoExclude<"a" | "b" | "c", "a">
Manter apenas de uma uniãoExtract<"a" | "b", "a" | "c">
Remover null / undefinedNonNullable<string | null>
Tipo de retornoReturnType<typeof fn>
Tupla de parâmetrosParameters<typeof fn>
Tipo da promise resolvidaAwaited<Promise<string>>

Módulos

Importe e exporte entre arquivos.

OperaçãoSintaxe
Export nomeadoexport function add(a: number, b: number) { … }
Export padrãoexport default class User { … }
Re-exportarexport { User } from "./user";
Import nomeadoimport { add } from "./math";
Import padrãoimport User from "./user";
Import apenas de tipoimport type { User } from "./user";
Importar tudoimport * as math from "./math";
Referência triple-slash/// <reference types="node" />

Essenciais do tsconfig

As flags do compilador que valem a pena conhecer.

OpçãoEfeito
"strict": trueAtiva todas as verificações do modo estrito (recomendado).
"target": "ES2022"Versão de JavaScript que o tsc emite.
"module": "ESNext"Sistema de módulos na saída emitida.
"moduleResolution": "bundler"Resolve módulos como os bundlers modernos.
"jsx": "react-jsx"Habilita JSX para React 17+.
"esModuleInterop": trueImports padrão mais limpos a partir de CommonJS.
"skipLibCheck": truePula a checagem de tipos em node_modules (mais rápido).
"noEmit": trueApenas verificação de tipos — o bundler emite a saída.

A sintaxe de TypeScript que você mais usa, em uma única página. Este cheat sheet de TypeScript é uma referência rápida para o dia a dia em TS: tipos básicos, interfaces, type aliases, generics, uniões, narrowing e os utility types embutidos.

Tudo aqui é TypeScript padrão que compila com tsc e roda em qualquer lugar onde JavaScript moderno funciona. Copie o que precisar ou teste qualquer trecho ao vivo no playground de TypeScript, sem instalar nada.

Perguntas frequentes sobre o cheat sheet de TypeScript

Este cheat sheet de TypeScript é grátis?
Sim. Este cheat sheet de TypeScript é totalmente grátis, sem necessidade de cadastro. Salve nos favoritos e volte sempre que precisar consultar um tipo, uma interface ou um utility type.
Qual a diferença entre interface e type alias?
Ambos podem descrever o formato de um objeto e, na maioria dos casos do dia a dia, são intercambiáveis. Interfaces podem ser reabertas e estendidas entre arquivos (declaration merging), o que é útil para tipos de bibliotecas. Type aliases podem nomear uniões, interseções, tuplas e mapped types — formatos que você não consegue expressar com interface. Regra prática: use interface para formatos de objeto públicos e type para uniões, tuplas e tipos calculados.
Qual a diferença entre any e unknown?
any desativa totalmente a checagem de tipos — o compilador deixa você fazer qualquer coisa com ele. unknown é seguro: você precisa restringi-lo (com typeof, instanceof ou um type guard) antes de usar. Prefira unknown para valores vindos de fontes externas como JSON.parse ou fetch — ele força você a validar antes de usar.
Preciso aprender JavaScript antes de TypeScript?
Sim — TypeScript é JavaScript com um sistema de tipos por cima, então toda habilidade em JS é aproveitada. Se você ainda está fortalecendo os fundamentos (arrays, objetos, async/await), o cheat sheet de JavaScript é um bom ponto de partida e o curso grátis de JavaScript da Coddy cobre o mesmo conteúdo de forma interativa.
Posso praticar TypeScript online?
Sim. Abra o playground de TypeScript para rodar qualquer trecho deste cheat sheet no seu navegador — sem instalar nada. Quando quiser estrutura, aprenda pelo landing de JavaScript e aplique os tipos desta página por cima.
Coddy programming languages illustration

Aprenda TypeScript com a Coddy

COMEÇAR