Alias de tipos en TypeScript

Author
Por Darío Rivera
Publicado el en TypeScript

En un post anterior vimos los Tipos de Datos en TypeScript. Hoy vamos a ir un poco más allá y estudiar los alias de tipos, que permiten usar de una manera mucho más fluída un tipo de dato. Para definir un tipo se utiliza la palabra reservada type.


Atributos

Para declarar atributos podemos utilizar la siguiente sintaxis. Observa cómo hemos definido un alias de tipo que requiere dos atributos, name y age, así también como su tipo.

type User = {
    name: string,
    age: number
}

Los alias de tipos comparten muchas similitudes con las interfaces, sin embargo, los alias permiten definir uno o varios tipos particulares para una sola variable así:

type monthType = string | number;

interface Period {
  month: monthType
}

En este caso, los alias de tipos e interfaces no son intercambiables.

Atributos opcionales

Es posible declarar que ciertos atributos o funciones sean definidas opcionalmente. Para esto, a diferencia de otros lenguajes de programación, se utiliza el caracter ? en el nombre y no el tipo.

type User = {
    name: string,
    age?: number,
    addNote?: (note: string) => void
}

Atributos de lectura

Es posible definir atributos que solo sean de lectura. Con esto, sería imposible tratar de hacer una reasignación a un atributo una vez inicializado.

type User = {
    readonly type: string;
}

Atributos dentro de un stack

Si queremos definir un conjunto de valores posibles para un atributo podemos utilizar el caracter pipe.

type User = {
    type: 'Admin' | 'Guest';
    name: string;
}

También es posible definir un atributo con un tipo enum.

enum UserType {
    Admin,
    Guest
}

type User = {
    type: UserType;
    name: string;
}

Para ver más a detalle el tipo enum puedes dirigirte a nuestro post Enums en TypeScript.

Métodos

Para declarar métodos podemos utilizar dos sintaxis diferentes. Veamos a continuación cómo definimos el método addNote.

Forma 1

type User = {
    addNote(note: string): void;
}

Forma 2

type User = {
    addNote: (note: string) => void;
}

Extensión

Para extender un alias de tipo podemos hacerlo mediante una intersección.

type Animal = {
  name: string
}

type Bear = Animal & { 
  honey: boolean 
}

En el ejemplo anterior primero se define el alias de tipo Animal. Posteriomente se extiende creando el alias de tipo Bear. Este último tipo requiere los dos atributos de manera obligatoria.

Otra variación interesante de esta característica es que un tipo puede extender más de un tipo sin siquiera definir nuevos atributos. En este caso, es como unir las dos tipos en uno solo. Veamos el siguiente ejemplo.

type Contact = {
   name: string;
   birthDate: Date;
}

type Address = {
   line1: string;
   line2?: string;
}

type User = Contact & Address;

Modificación de tipo

A diferencia de las interfaces, un alias de tipo no puede ser modificado una vez creado. Esto quiere decir, que no se pueden adicionar más campos al alias ya creado, a no se que se haga una extensión como vimos anteriormente. El siguiente código arrojaría un error en la compilación.

type Window = {
  title: string
}

type Window = {
  ts: TypeScriptAPI
}

// Error: Duplicate identifier 'Window'.

Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.