TypeScript para Iniciantes: Tipando Funções e Objetos
By Iorgen Wildrik • 29 de setembro de 2024TypeScript é uma linguagem fortemente tipada que adiciona tipos ao JavaScript, ajudando a evitar erros de tipagem e tornando o código mais fácil de manter. Neste tutorial, vamos explorar como tipar funções, objetos e classes em TypeScript.
1. Tipando Funções
No TypeScript, podemos definir o tipo de parâmetros e o tipo de retorno de uma função. Isso nos dá mais controle e segurança no código.
Sintaxe Básica:
function sum(a: number, b: number): number { return a + b; }
Explicação:
a: number
eb: number
tipam os parâmetros como números.: number
após os parênteses indica que a função deve retornar um número.
Se tentarmos passar um argumento que não seja número, o TypeScript nos alertará sobre o erro.
Exemplo com Funções Anônimas:
const multiply = (x: number, y: number): number => { return x * y; };
Aqui usamos a mesma lógica, mas com uma função anônima (arrow function).
Funções com Parâmetros Opcionais:
Às vezes, precisamos de parâmetros que não são obrigatórios. Para isso, usamos o símbolo ?
.
function greet(name: string, age?: number): string { if (age) { return `Hello, ${name}. You are ${age} years old.`; } return `Hello, ${name}.`; }
age?: number
torna o parâmetroage
opcional.
2. Tipando Objetos
No TypeScript, podemos definir a estrutura de um objeto usando interfaces ou type aliases.
Usando type
para Objetos:
type User = { name: string; age: number; isAdmin: boolean; }; const user: User = { name: "John", age: 30, isAdmin: true, };
Explicação:
- Definimos o tipo
User
com três propriedades:name
,age
, eisAdmin
. - Quando criamos o objeto
user
, ele deve seguir essa estrutura.
Usando Interfaces:
Uma outra maneira de tipar objetos é através de interfaces. A vantagem é que podemos estender interfaces.
interface Car { model: string; year: number; isElectric: boolean; } const myCar: Car = { model: "Tesla Model S", year: 2021, isElectric: true, };
As interfaces são muito semelhantes a type
, mas podem ser mais flexíveis, especialmente ao trabalhar com herança.
3. Tipando Classes
Em TypeScript, as classes também podem ser tipadas de maneira robusta. Podemos definir os tipos de propriedades e métodos.
class Animal { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } speak(): void { console.log(`${this.name} makes a sound.`); } } const dog = new Animal("Buddy", 3); dog.speak(); // Output: Buddy makes a sound.
Explicação:
- As propriedades
name
eage
são tipadas comostring
enumber
, respectivamente. - O método
speak
não retorna nada (void
).
4. Tipos Combinados e União
TypeScript permite criar tipos mais complexos usando uniões ou interseções.
União (Union
):
Uma união permite que um valor tenha mais de um tipo.
function printId(id: number | string): void { console.log(`Your ID is: ${id}`); } printId(101); // Válido printId("202"); // Válido
Aqui, o parâmetro id
pode ser um number
ou string
.
Interseção (Intersection
):
Já a interseção combina vários tipos em um.
type Admin = { name: string; permissions: string[]; }; type Employee = { name: string; department: string; }; type AdminEmployee = Admin & Employee; const admin: AdminEmployee = { name: "Alice", permissions: ["edit", "delete"], department: "IT", };
Neste exemplo, AdminEmployee
combina as propriedades de Admin
e Employee
.
Conclusão
Neste guia, abordamos os fundamentos de como usar tipos em funções, objetos e classes em TypeScript. Usar tipos ajuda a garantir que o código esteja correto, fácil de manter e menos propenso a erros.
Resumo:
- Tipar funções ajuda a evitar erros de parâmetro e retorno.
- Tipar objetos garante que eles sigam uma estrutura específica.
- Classes em TypeScript podem ser fortemente tipadas para facilitar o desenvolvimento.
- Tipos avançados, como uniões e interseções, aumentam a flexibilidade e segurança do código.