DEV Community

Cover image for Polimorfismo e Generics Avançados em TypeScript
Levy Henrique Alves Nunes
Levy Henrique Alves Nunes

Posted on

1

Polimorfismo e Generics Avançados em TypeScript

O TypeScript oferece recursos avançados para tipos e polimorfismo, especialmente ao trabalhar com generics. Estes recursos proporcionam maior segurança ao tipar e flexibilidade em cenários de programação comuns.

Generics com Restrições

Em algumas situações, deseja-se permitir qualquer tipo com generics, mas ainda quer-se restringir os tipos possíveis com certas características. Essas restrições são definidas usando a cláusula extends.

Exemplo:

Suponha que você queira uma função que retorne uma propriedade de um objeto, mas você quer garantir que a propriedade realmente exista no objeto.

function getPropriedade<T, K extends keyof T>(obj: T, chave: K): T[K] {
    return obj[chave];
}

const pessoa = {
    nome: "Ana",
    idade: 25
};

// Uso válido
let nome: string = getPropriedade(pessoa, "nome");

// Erro! "altura" não é uma chave de pessoa.
// let altura: number = getPropriedade(pessoa, "altura");
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, K extends keyof T garante que o segundo argumento seja uma chave do objeto fornecido como primeiro argumento.

Usando a palavra-chave keyof

A operação keyof é uma operação de tipo que pega um tipo e produz uma string ou tipo numérico literal que representa as chaves desse tipo.

Exemplo:

interface Carro {
    marca: string;
    modelo: string;
    ano: number;
}

type ChavesDoCarro = keyof Carro;  // "marca" | "modelo" | "ano"
Enter fullscreen mode Exit fullscreen mode

Aqui, ChavesDoCarro é um tipo que pode ser "marca", "modelo" ou "ano".

Usando keyof com Generics:

keyof é extremamente útil em conjunto com generics, especialmente quando se deseja garantir que a operação seja realizada com propriedades que existem em um objeto.

function setPropriedade<T>(obj: T, chave: keyof T, valor: T[keyof T]): T {
    obj[chave] = valor;
    return obj;
}

const carro: Carro = {
    marca: "Toyota",
    modelo: "Corolla",
    ano: 2020
};

// Uso válido
setPropriedade(carro, "modelo", "Camry");

// Erro! "cor" não é uma chave de Carro.
// setPropriedade(carro, "cor", "Vermelho");
Enter fullscreen mode Exit fullscreen mode

Conclusão

Polimorfismo e generics avançados em TypeScript ampliam as possibilidades de criar código reutilizável e ainda mantêm uma forte segurança de tipo. Com a combinação de generics restritos e a operação keyof, é possível escrever funções genéricas precisas e seguras que operam em propriedades de objetos. Estes recursos tornam o TypeScript uma ferramenta poderosa para desenvolvimento, combinando flexibilidade com segurança de tipo.

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (0)

Cloudinary image

Video API: manage, encode, and optimize for any device, channel or network condition. Deliver branded video experiences in minutes and get deep engagement insights.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay