Logo

Publicado

- 3 min read

Dominando o TypeScript: Interfaces, Types e Genéricos para Projetos Avançados

img of Dominando o TypeScript: Interfaces, Types e Genéricos para Projetos Avançados

Dominando o TypeScript: Interfaces, Types e Genéricos para Projetos Avançados

TypeScript é uma linguagem poderosa que adiciona tipagem estática ao JavaScript, permitindo que você escreva código mais robusto, compreensível e de fácil manutenção. Através de recursos como interfaces, types e genéricos, você pode criar aplicações escaláveis e menos propensas a erros. Neste post, vamos explorar essas funcionalidades avançadas de maneira prática.

Pré-requisitos

Para aproveitar ao máximo este conteúdo, é recomendável que você tenha:

  • Conhecimento básico em JavaScript
  • Familiaridade com TypeScript e suas configurações
  • Experiência em desenvolvimento de projetos frontend e/ou backend

Conceitos Avançados

Interfaces

As interfaces em TypeScript definem a forma de um objeto. Elas são úteis para garantir que os objetos que você cria seguem uma estrutura específica.

Exemplo de Interface

   interface Usuario {
	id: number
	nome: string
	email: string
}

const usuario: Usuario = {
	id: 1,
	nome: 'João',
	email: 'joao@email.com'
}

Types

Os types são similares às interfaces, mas oferecem mais flexibilidade. Você pode definir unions, intersections e até tipos primitivos.

Exemplo de Type

   type Produto = {
	id: number
	nome: string
}

type Item = Produto & {
	quantidade: number
}

const item: Item = {
	id: 2,
	nome: 'Caderno',
	quantidade: 5
}

Genéricos

Genéricos permitem criar funções e classes que trabalham com diferentes tipos sem perder a segurança de tipos. Isso é especialmente útil em contextos de reutilização de código.

Exemplo de Genérico

   function identidade<T>(valor: T): T {
	return valor
}

const numero = identidade<number>(123)
const texto = identidade<string>('Olá, mundo!')

Mini-Projeto Prático: Um Gerenciador de Produtos

Vamos criar um gerenciador simples de produtos utilizando os conceitos que aprendemos.

Estrutura do Projeto

  1. Crie uma pasta chamada gerenciador-produtos.
  2. Dentro dela, crie um arquivo index.ts.

Código do Projeto

   interface Produto {
	id: number
	nome: string
	preco: number
}

class GerenciadorProdutos {
	private produtos: Produto[] = []

	adicionarProduto(produto: Produto): void {
		this.produtos.push(produto)
	}

	listarProdutos(): Produto[] {
		return this.produtos
	}
}

// Utilizando o Gerenciador
const gerenciador = new GerenciadorProdutos()
gerenciador.adicionarProduto({ id: 1, nome: 'Camiseta', preco: 49.9 })
gerenciador.adicionarProduto({ id: 2, nome: 'Calça', preco: 99.9 })

console.log(gerenciador.listarProdutos())

Padrões de Projeto em TypeScript

Ao trabalhar com TypeScript, alguns padrões de projeto recomendados incluem:

  • Singleton: Para garantir que uma classe tenha uma única instância e fornecer um ponto de acesso global.
  • Factory: Para criar objetos sem especificar a classe concreta.
  • Observer: Para uma comunicação eficiente entre objetos.

Dicas de Próximos Passos

  • Explore o padrão de projeto Functional Programming no TypeScript.
  • Estude sobre Decorators para adicionar funcionalidades a classes e métodos.
  • Pratique com projetos open-source no GitHub que utilizem TypeScript.

Erros Comuns e Soluções

Erro: Type 'X' is not assignable to type 'Y'.

Solução: Verifique as definições de tipos e certifique-se de que os tipos estão sendo respeitados.

Erro: Generic type 'T' does not satisfy the constraint

Solução: Certifique-se de que os genéricos possuem uma restrição adequada ou que estão sendo utilizados corretamente.

Materiais de Apoio

Aprofunde-se mais no TypeScript e crie aplicações robustas e escaláveis! Esperamos que este guia tenha sido útil e desejamos sucesso em seus projetos com TypeScript.