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:
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:
Caso definam objetos, a Union permite que o dado implemente as propriedades de um dos tipos ou de ambos:
Assim, o objeto pode assumir as seguintes formas:
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ó:
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:
No caso da Função, declaram-se os parâmetros e o tipo do retorno:
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ó:
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:
Além disso, podemos estender uma Interface, com a mesma sintaxe:
Por sua vez, a Interface utiliza a keyword “extends” para estender um Alias ou Interface:
Implements
O TypeScript permite que Classes implementem Aliases ou Interfaces, com o uso da keyword “implements”:
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:
Biblioteca de conceitos de desenvolvimento
Autor: Gustavo França Albano de Paula.
[adrotate banner=”5″]