0Pricing
TypeScript Academy · Lección

Qué es un DSL a nivel de tipos

Utilice tipos para restringir una API fluida a programas válidos.

Qué es un DSL a nivel de tipos es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.

¿Qué es un DSL en el nivel de tipos?

Un DSL en el nivel de tipos (lenguaje específico del dominio) utiliza tipos de TypeScript para restringir una API, de modo que solo los programas válidos compilan. Los tipos actúan como una gramática: las combinaciones no válidas se rechazan antes de que el código llegue a ejecutarse.

DSL integrados

Un DSL integrado vive dentro del lenguaje anfitrión (en este caso, TypeScript) en lugar de utilizar un analizador independiente. Se escribe TS normal, pero el sistema de tipos impone las reglas del DSL.

Un ejemplo conocido

Ya ha utilizado DSL en el nivel de tipos: un generador de consultas que solo permite nombres de columnas válidos o un enrutador que infiere los parámetros a partir de una ruta. Los tipos codifican lo que permite la API.

Restringir una API fluida

La idea central es que cada método devuelve un tipo que limita los métodos que puede llamar a continuación. Si se llaman las operaciones en el orden incorrecto, la compilación falla.

interface Empty { from(t: string): HasFrom; }
interface HasFrom { where(c: string): HasFrom; select(): string; }

declare const q: Empty;
q.from("users").select();      // ok
q.select();                    // Error: select not on Empty

Máquinas de estados en los tipos

Este patrón es una máquina de estados en el nivel de tipos: cada interfaz es un estado y cada método es una transición a otro estado. El compilador recorre la máquina a medida que encadena llamadas.

¿Por qué no limitarse a comprobaciones en tiempo de ejecución?

Las comprobaciones en tiempo de ejecución fallan tarde, en producción y con usuarios presentes. Un DSL en el nivel de tipos falla pronto, en el editor, con un subrayado rojo, antes de publicar el código. Las mismas reglas, pero con una respuesta mucho más económica.

Parámetros de tipo fantasma

Los DSL suelen transportar información mediante parámetros de tipo fantasma: genéricos que existen únicamente en tiempo de compilación para hacer un seguimiento del estado acumulado (columnas seleccionadas, variables enlazadas) sin coste en tiempo de ejecución.

interface Query<Selected extends string> {
  select<C extends string>(c: C): Query<Selected | C>;
}

Tipos literales como tokens

Los tipos literales de cadena actúan como tokens del DSL. Combinados con literales de plantilla y uniones, permiten que el sistema de tipos razone sobre el contenido textual del DSL.

type Direction = "asc" | "desc";
declare function orderBy(col: string, dir: Direction): void;
orderBy("age", "asc");   // ok
orderBy("age", "up");    // Error: not a Direction

Los bloques de construcción

Los DSL en el nivel de tipos combinan genéricos para el estado, tipos condicionales para las bifurcaciones, literales de plantilla para analizar cadenas y tipos mapeados para transformar estructuras. Las lecciones posteriores utilizan cada uno de ellos.

Compromisos

Los DSL en el nivel de tipos ofrecen garantías sólidas, pero pueden generar errores crípticos y compilaciones más lentas si se usan en exceso. Los buenos DSL equilibran la seguridad con mensajes de error fáciles de leer (una lección posterior aborda este tema).

Por qué es importante

Codificar las reglas del dominio en los tipos convierte al compilador en un experto del dominio: rechaza automáticamente lo que no tiene sentido. Así es como los generadores de consultas, las bibliotecas de formularios y los sistemas de efectos ofrecen garantías tan sólidas.

Comprobación rápida

Ponga a prueba su comprensión de los DSL en el nivel de tipos.

Resumen

Un DSL en el nivel de tipos utiliza los tipos de TypeScript como una gramática para que solo se compilen programas válidos. Las API fluidas modelan máquinas de estados en las que cada método devuelve un tipo que restringe el estado, utilizando genéricos fantasma, tokens de tipos literales y tipos condicionales, de literales de plantilla y mapeados como bloques de construcción, lo que proporciona información temprana en el editor.

Preguntas frecuentes

¿La lección «Qué es un DSL a nivel de tipos» es gratis?

Sí — el texto completo de «Qué es un DSL a nivel de tipos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Qué es un DSL a nivel de tipos»?

Utilice tipos para restringir una API fluida a programas válidos. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar TypeScript Academy?

No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Qué es un DSL a nivel de tipos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?

Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Qué es un DSL a nivel de tipos
  2. Diseño de un DSL fluido de consultas
  3. Validación de entradas en tiempo de compilación
  4. Mensajes de error en DSL a nivel de tipos
← Volver a TypeScript Academy