Alias de Tipo em TypeScript
O TypeScript permite definir aliases de tipos usando a palavra-chave type
:
type id = number | string;
let userId: id = 2;
console.log(`Id: ${userId}`);
userId = "qwerty";
console.log(`Id: ${userId}`);
Aqui, o alias id
é definido para o tipo combinado number | string
. Em seguida, podemos usar esse alias para definir variáveis.
Além disso, os aliases podem ser aplicados para definir o tipo de parâmetros e o resultado de funções:
// Definindo o alias
type id = number | string;
// O parâmetro da função usa o alias
function printId(inputId: id) {
console.log(`Id: ${inputId}`);
}
// O tipo de retorno da função também é um alias
function getId(isNumber: boolean): id {
return isNumber ? 1 : "1";
}
// Usando as funções
printId(12345);
printId("qwerty");
console.log(getId(true));
Os aliases de tipos são especialmente úteis ao lidarmos com objetos:
type Person = { name: string; age: number };
let tom: Person = { name: "Tom", age: 36 };
let bob: Person = { name: "Bob", age: 41 };
function printPerson(user: Person) {
console.log(`Name: ${user.name} Age: ${user.age}`);
}
printPerson(tom);
printPerson(bob);
Nesse caso, o alias Person
é definido para o tipo { name: string; age: number }
, que representa um objeto. Esse alias é então utilizado para declarar variáveis e parâmetros de funções.
Expandindo Aliases de Tipo
Aliases podem herdar ou expandir outros aliases usando o operador &
. Por exemplo:
type Person = { name: string; age: number };
type Employee = Person & { company: string };
Aqui, o alias Employee
expande o alias Person
, adicionando a propriedade company
, que é do tipo string
. Isso significa que Employee
é equivalente ao tipo:
type Employee = { name: string; age: number; company: string };
A aplicação de aliases expandidos é semelhante à de aliases comuns:
type Person = { name: string; age: number };
// Expandindo o alias Person
type Employee = Person & { company: string };
let tom: Person = { name: "Tom", age: 36 };
let bob: Employee = { name: "Bob", age: 41, company: "Microsoft" };
function printPerson(user: Person) {
console.log(`Name: ${user.name} Age: ${user.age}`);
}
printPerson(tom);
printPerson(bob); // bob é do tipo Employee, mas também corresponde ao alias Person
Este exemplo mostra como bob
, mesmo sendo do tipo Employee
, pode ser utilizado onde se espera um Person
, já que ele herda as propriedades definidas pelo alias Person
.