Blog

TypeScript: quando utilizar Alias ou Interface?

A imagem mostra um desenvolvedor atuando em códigos, demonstrando a importância de saber utilizar o TypeScript Alias ou Interface.
Conceitos de Programação / Desenvolvimento / Desenvolvimento de Software / Programação

TypeScript: quando utilizar Alias ou Interface?

Uma dúvida frequente na área do desenvolvimento é quando utilizar cada função? Sendo as duas similares e, muitas vezes, intercambiáveis. As linguagens de programação fornecem diversas ferramentas para solucionarmos os problemas e, frequentemente, surgem dúvidas sobre em qual situação cada uma deve ser utilizada para melhor atender às necessidades. Como é o caso do TypeScript.

Existem várias formas de definir os tipos dos dados usados pela aplicação, bem como formas de definir tipos personalizados, como o Alias e a Interface, famosos por causarem essa confusão. Portanto, vamos entender como cada um funciona e quais suas diferenças?

Alias: maneira de definir tipos personalizados

Como já mencionado, com o TypeScript, é possível definir o tipo do dado, como:

  • Primitivo (boolean, number, null, string ou undefined);
  • Complexos (array ou objeto);
  • Função ou any (o dado assume qualquer tipo, por inferência).

Porém, não seria interessante poder definir tipos personalizados para dados específicos da aplicação?

É aí que entra o Alias: uma sintaxe do TypeScript para definir um tipo personalizado, com a estrutura que se deseja, para melhor adequar a tipagem à necessidade da aplicação.

Sua sintaxe é simples, bastando utilizar a keyword “type”, seguida do nome personalizado e atribuir a ele os tipos de dados da linguagem. Por exemplo:

Representação do uso do Alias.

No entanto, não estamos obtendo o mesmo resultado que teríamos ao tipar diretamente o dado, sem criar um Alias? Sim, mas é aí que entra a utilidade do Alias: poder criar Unions ou Intersections.

Unions

Union significa união, e essa é a sintaxe que possibilita unir vários Alias em um só. Dessa forma, ele pode assumir vários tipos diferentes, ou ambos, com o uso do pipe “|”. Por exemplo, a variável myStringOrNumber poderá ser tanto uma string quanto um number:

Representação de um Union Type.

Caso definam objetos, a Union permite que o dado implemente as propriedades de um dos tipos ou de ambos:

Representação da implementação de um Union Type com Objetos.

Assim, o objeto pode assumir as seguintes formas:

Representação da implementação de um Union Type com Objetos.

Intersection

Por sua vez, a Intersection permite combinar Alias diferentes em um só, com as características de ambos, com o uso do “&”. Por exemplo, usando os Alias do último exemplo, podemos combiná-los em um só:

Representação de uma Intersection.

Com isso, IntersectionAlias se torna uma combinação de ambos os tipos referenciados.

Interface

A Interface é uma sintaxe do TypeScript que define as especificações de uma entidade. Ou seja, define o contrato, a estrutura de uma Classe, Objeto ou Função.

Uma Interface é definida usando a keyword “interface”, seguida do nome e das especificações. Por exemplo:

Representação de uma Interface.

No caso da Função, declaram-se os parâmetros e o tipo do retorno:

Representação de uma Interface que define uma Função.

Declaration Merging

Diferentemente do Alias, uma Interface pode ser declarada mais de uma vez, o que fará com que todas as declarações sejam mescladas numa só:

Representação do Declaration Merging de uma Interface.

A Interface ICar passa a ser composta pelas entidades das duas declarações. Isso porque o TypeScript mescla todas as declarações de uma mesma Interface.

Extends

Tanto o Alias quanto a Interface podem ampliar outros, de forma que devem implementar os membros do Alias ou Interface ampliado e os próprios.

No caso do Alias, a extensão é feita usando o “&” para criar uma Intersection:

Representação de um Alias que estende outro.

Além disso, podemos estender uma Interface, com a mesma sintaxe:

Representação de um Alias que estende uma Interface.

Por sua vez, a Interface utiliza a keyword “extends” para estender um Alias ou Interface:

Representação de uma Interface que estende um Alias.

Implements

O TypeScript permite que Classes implementem Aliases ou Interfaces, com o uso da keyword “implements”:

Representação de Classes que implementam uma Interface ou Alias.

TypeScript Alias x Interface: qual a diferença, afinal?

Ante todo o exposto neste artigo, percebemos que as duas ferramentas são similares, e até intercambiáveis.

Porém, fica claro que cada uma possui características que as tornam mais específicas para determinadas situações.

No caso da Interface, ela é mais limitada, pois apenas define a estrutura de uma Classe, Objeto ou Função. Entretanto, isso a torna melhor nesse caso de uso, qual seja, definir as entidades desses tipos complexos.

O Alias, por sua vez, possui uma abrangência maior, pois permite a definição de tipos personalizados a partir dos primitivos e complexos. Assim, possibilita atender às diferentes situações que uma aplicação pode ter para seus dados.

Dessa forma, conclui-se que a Interface deve ser utilizada quando se quer tipar uma Classe, Objeto ou Função, pois seu uso é destinado especificamente para isso. Já o Alias serve para todas as demais situações em que se quer definir tipos para um dado da aplicação, que não seriam abrangidos pelos fornecidos pelo TypeScript.

Leia também:

Abstração orientada ao objeto

Biblioteca de conceitos de desenvolvimento

Autor: Gustavo França Albano de Paula.

Comments (3)

  1. […] Vamos criar um projeto utilizando um template pré-configurado para trabalhar com a AWS, Node e TypeScript. […]

    17 de junho de 2022 at 12:54
  2. […] O Prisma é um ORM (Object-Relational Mapping) que ajuda os desenvolvedores a criar aplicações mais rapidamente e cometer menos erros com um kit de ferramentas de banco de dados opensource, como PostgreSQL e MySQL. Além disso, o Prisma também suporta as seguintes linguagens: Javascript e Typescript. […]

    23 de junho de 2022 at 15:55
  3. […] Além disso, em todos eles nós temos a opção com o template em Typescript. […]

    18 de julho de 2022 at 14:41

Comments are closed.

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
  • Attributes
  • Custom attributes
  • Custom fields
Click outside to hide the comparison bar
Compare