Saltar al contenido
webtype.orgwebtype.orgDoce conceptos · 1/12

    ↑↓ mover · ⏎ abrir · esc cerrar

    Concepto 1 de 12

    Alias de tipos

    Un alias de tipo da nombre a un tipo que podrías haber escrito en línea. Eso es todo lo que hace — no crea un tipo nuevo, solo una forma más corta de referirse a uno existente. Cada puzle de este sitio es en el fondo un alias de tipo, y por eso la subida empieza aquí.

    Un alias es transparente

    type ID = string
    
    // These two signatures are the same type, not merely compatible ones.
    declare function save(id: ID): void
    declare function save(id: string): void

    El compilador sustituye el alias allá donde aparece. `ID` y `string` son intercambiables en cualquier posición, y un mensaje de error puede mostrar cualquiera de los dos según cuál sea más corto.

    Esto es lo que distingue un alias de una clase o un enum, que sí crean tipos nuevos. Si quieres dos cosas con forma de cadena que el compilador se niegue a confundir, un alias no te lo dará — necesitas un tipo con marca.

    Los alias pueden nombrar cualquier cosa

    type Point = { x: number; y: number }
    type Direction = 'up' | 'down'
    type Handler = (event: string) => void
    type Pair = [number, number]

    Se pueden nombrar uniones, funciones, tuplas y formas de objeto. Una `interface` solo puede describir un objeto, que es la razón práctica por la que casi todo el código a nivel de tipos usa `type`.

    El error más común

    type Meters = number
    type Feet = number
    
    declare function jump(height: Meters): void
    jump(12 as Feet) // no error — both are just number

    Los alias no crean tipos distintos, así que esto compila sin quejarse y las unidades no coinciden en silencio. Nombrar un tipo documenta la intención para quien lee; al compilador no le impone nada.

    Ejercicio

    Dale un nombre a este tipo de objeto, para que `Point` se refiera a él.

    Pruébalo

    1
    • Point
      { x: number; y: number }

    Para recordar

    Un alias es un apodo, no una cosa nueva. Todo lo que sigue en esta ruta es el mismo apodo con parámetros añadidos.