Blog

Software de ponta feito por times excepcionais, nocionalmente e internacionalmente.

Group 345

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.

[adrotate banner=”4″]

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.

[adrotate banner=”5″]

Gostou do conteúdo? Compartilhe

Acelere a Transformação
Digital da sua Empresa

Por favor, preencha o formulário
ou ligue (11) 3055-3404.

Contate-nos

Inteligência em Tecnologia

Luby BR

São Paulo – Brazil
Av. Pres. Juscelino Kubitschek, 50, 17º andar – Itaim Bibi

Luby USA

Miami – USA
1110 Brickwell Ave, ste 310

Copyright ©2023 Luby Technology LLC. All rights reserved.

Rolar para cima