Criando um objeto a partir de uma interface TypeScript: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como criar um objeto com base em uma interface no TypeScript: explicação completa com código



Você já se deparou com uma situação em que o TypeScript literalmente "grita" com você porque você está tentando criar um objeto que não corresponde à interface? Familiar? Se você trabalha com TypeScript há pelo menos uma semana, com certeza já viu este erro:



Type '{}' is missing the following properties from type 'User': name, age


Este é um dos problemas mais populares no Stack Overflow (dezenas de milhares de visualizações), e hoje vamos resolvê-lo de uma vez por todas. Neste artigo, você aprenderá como criar um objeto com base em uma interface no TypeScript, quais são as formas e quando usar cada uma.



Por que este tópico é tão importante?



TypeScript é uma extensão do JavaScript que adiciona tipagem estática. As interfaces do TypeScript são uma ferramenta poderosa para descrever a estrutura de objetos. Mas os iniciantes frequentemente se confundem: "Eu declarei uma interface, mas como crio um objeto real agora?"



Sem o entendimento correto dessa mecânica, você perderá horas depurando ou, pior ainda, usará any — o que é um caminho direto para perder todas as vantagens do TypeScript.



Método 1: Atribuição direta (o mais simples)



A maneira mais óbvia de criar um objeto a partir de uma interface TypeScript é simplesmente atribuir um literal de objeto a uma variável com o tipo da interface:



interface User {  name: string;  age: number;  email?: string; // campo opcional}

// ✅ Correto: objeto corresponde completamente à interfaceconst user: User = { name: "Ana", age: 28, email: "ana@exemplo.com"};

// ✅ Também correto: campo opcional pode ser omitidoconst userMinimal: User = { name: "João", age: 35};


Isso funciona, mas há um detalhe: o TypeScript verificará se o objeto possui TODOS os campos obrigatórios. Se você esquecer name ou age, o compilador emitirá um erro.



❌ Erro típico de iniciantes



// ❌ Erro! Campo obrigatório 'age' ausenteconst badUser: User = {  name: "Pedro"};


Método 2: Usando o operador as (type assertion)



Às vezes, você precisa criar um objeto gradualmente, por exemplo, preenchendo-o de diferentes fontes. Nesses casos, você pode usar o operador as:



interface Config {  apiUrl: string;  timeout: number;  retries: number;}

// Criando um objeto vazio com type assertionconst config = {} as Config;

// Agora você pode adicionar campos um por umconfig.apiUrl = "https://api.exemplo.com";config.timeout = 5000;config.retries = 3;

// ✅ Funciona, mas TOME CUIDADO!


⚠️ Aviso: Este método desativa a verificação de tipos no momento da criação do objeto. Você pode acidentalmente pular um campo obrigatório e só descobrir isso em tempo de execução. Use as apenas quando tiver certeza de que todos os campos serão preenchidos.



Método 3: Função fábrica (recomendado)



A melhor maneira de criar um objeto com base em uma interface no TypeScript é escrever uma função fábrica. Isso oferece 100% de segurança de tipos e a capacidade de definir valores padrão:



interface Product {  id: number;  title: string;  price: number;  inStock: boolean;  description?: string;}

// Função fábrica com parâmetros padrãofunction createProduct( id: number, title: string, price: number, inStock: boolean = true, description?: string): Product { return { id, title, price, inStock, ...(description && { description }) };}

// Usoconst laptop = createProduct(1, "Notebook", 999.99);const phone = createProduct(2, "Smartphone", 599.99, false, "Ótimo telefone");

console.log(laptop); // { id: 1, title: 'Notebook', price: 999.99, inStock: true }console.log(phone)

Blogs

Book Recommendations