Saltar al contenido principal
eLearner.app
Módulo 5 · Lección 2 de 210/14 en el curso~15 min
Lecciones del módulo (2/2)

Tipos Literales y Aserciones

TypeScript ofrece herramientas avanzadas para limitar los posibles valores de las variables y para obligar al compilador a reconocer tipos más específicos cuando sea necesario.


Tipos Literales (Literal Types)

Un tipo literal representa un único valor preciso (por ejemplo, una cadena o un número específico). Por lo general, se combinan con las uniones:

TS
type TrafficLight = 'red' | 'yellow' | 'green';
let light: TrafficLight;

light = 'red'; // OK
light = 'blue'; // Errore: "blue" non è assegnabile a TrafficLight

Aserciones de Tipo (as)

A veces dispones de información sobre un tipo que TypeScript no puede conocer en tiempo de compilación. En estos casos, puedes usar una aserción de tipo mediante la palabra clave as:

TS
const myCanvas = document.getElementById('main_canvas') as HTMLCanvasElement;

La aserción le dice al compilador: "Confía en mí, sé que este elemento es un HTMLCanvasElement". No realiza ninguna verificación ni conversión (cast) en tiempo de ejecución; solo sirve para ayudar al verificador de tipos (type checker).


Aserciones Const (as const)

Cuando declaramos un objeto o un array con const, TypeScript permite modificar sus propiedades internas. Al agregar as const al final, toda la estructura se congela y se vuelve de solo lectura, convirtiendo todas las propiedades en sus tipos de valores literales exactos:

TS
const colors = ['red', 'green', 'blue'] as const;
// colors[0] = "yellow"; // Errore: l'array è di sola lettura (readonly)

Tipos de Cadena de Plantilla (Template Literal Types)

Los tipos de cadena de plantilla se basan en las plantillas de cadena de JavaScript, pero se utilizan para definir tipos. Permiten combinar varios tipos literales en uno solo:

TS
type Size = 'small' | 'large';
type Color = 'red' | 'blue';

// Crea l'unione: "small-red" | "small-blue" | "large-red" | "large-blue"
type ItemId = `${Size}-${Color}`;

Utilidades de Cadenas en los Template Literal Types

TypeScript ofrece tipos de utilidad especiales para manipular caracteres dentro de los Template Literal Types:

  • Capitalize<StringType>: Convierte en mayúscula la primera letra de la cadena.
  • Uncapitalize<StringType>: Convierte en minúscula la primera letra de la cadena.
  • Uppercase<StringType>: Convierte toda la cadena en mayúsculas.
  • Lowercase<StringType>: Convierte toda la cadena en minúsculas.
TS
type ActionType = 'click' | 'hover';

// Genera: "onClick" | "onHover"
type EventHandlers = `on${Capitalize<ActionType>}`;

Pruébalo tú

Ejercicio 1: Unión de Literales Direction

Ejercicio#ts.m5.l2.e1
Intentos: 0Cargando...

Define un tipo literal llamado Direction que acepte solo las cadenas 'up', 'down', 'left' o 'right'. Luego declara una función llamada move(dir: Direction): string que devuelva la cadena 'Moving ' seguida de la dirección recibida.

Cargando editor...
Mostrar pista

Define primero el alias de tipo con las cuatro opciones separadas por |, luego declara la función move anotando el parámetro y el retorno.

Solución disponible después de 3 intentos

Ejercicio 2: Aserción sobre JSON.parse

Ejercicio#ts.m5.l2.e2
Intentos: 0Cargando...

La función JSON.parse devuelve por defecto el tipo any. Modifica la función parseUser para que el resultado de JSON.parse(json) sea aseverado como tipo { username: string } usando la palabra clave as.

Cargando editor...
Mostrar pista

Agrega 'as { username: string }' inmediatamente después de la llamada a JSON.parse(json).

Solución disponible después de 3 intentos

Ejercicio 3: Template Literal para Eventos

Ejercicio#ts.m5.l2.e3
Intentos: 0Cargando...

Dados los tipos Status y Action, define un tipo de cadena de plantilla llamado Event en el formato 'Status-Action' (por ejemplo, 'open-click').

Cargando editor...
Mostrar pista

Usa las comillas invertidas (backticks) para definir el tipo y la sintaxis ${Status}-${Action} en su interior.

Solución disponible después de 3 intentos

Ejercicio 4: Template Literal Type con Capitalize

Ejercicio#ts.m5.l2.e4
Intentos: 0Cargando...

Define un tipo literal Event que pueda ser 'click' o 'hover'. Después de eso, usa Template Literal Types para declarar un tipo EventHandler que represente cadenas en el formato on seguido del nombre del evento con la inicial en mayúscula (es decir, 'onClick' o 'onHover').

Cargando editor...
Mostrar pista

Usa Capitalize<Event> dentro del template literal para convertir en mayúscula la primera letra del evento.

Solución disponible después de 3 intentos