0Pricing
TypeScript Academy · Lección

Tokens de servicio seguros

Utilice tokens tipados para evitar errores de resolución en tiempo de ejecución.

Tokens de servicio seguros es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 4 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.

El problema de los tokens de cadena

Los tokens de cadena, como "Logger", son fáciles de escribir mal y no contienen información de tipos. El contenedor no puede indicarle que get("Loggr") es incorrecto, y el tipo resuelto suele ser any.

Símbolos como tokens

Usar símbolos en lugar de cadenas proporciona a cada token una identidad única que no puede entrar en conflicto accidentalmente con otra. Un registro central los mantiene organizados.

const TYPES = {
  Logger: Symbol.for("Logger"),
  Mailer: Symbol.for("Mailer"),
} as const;

Asociar tokens con tipos

El objetivo más profundo es asociar cada token con el tipo al que se resuelve, para que el contenedor devuelva el tipo correcto en lugar de any. Construiremos un envoltorio tipado para tokens.

interface Token<T> {
  readonly id: symbol;
  readonly _type?: T; // phantom type marker
}

Crear tokens tipados

Una función auxiliar produce un token que conserva su tipo en un campo fantasma. El campo nunca contiene un valor; solo transmite información de tipos al compilador.

function token<T>(name: string): Token<T> {
  return { id: Symbol.for(name) };
}
const LoggerToken = token<Logger>("Logger");

Una interfaz de contenedor tipada

Tipamos el contenedor para que get infiera el tipo resuelto a partir del token. Sin conversiones ni any.

interface TypedContainer {
  get<T>(t: Token<T>): T;
  bind<T>(t: Token<T>, impl: () => T): void;
}

Vincular con tipos inferidos

Al hacer el bind, el tipo de retorno de la factoría debe coincidir con el tipo del token. Las incompatibilidades se detectan en tiempo de compilación.

declare const c: TypedContainer;
c.bind(LoggerToken, () => new ConsoleLogger());
// ConsoleLogger must satisfy Logger or this errors.

Resolver con tipos completos

Ahora get devuelve exactamente el tipo del token. El autocompletado y la comprobación de tipos funcionan sobre el resultado sin ninguna anotación manual.

const logger = c.get(LoggerToken); // type: Logger
logger.log("typed resolution");

Evitar errores de búsqueda

Como los tokens son valores tipados, un error tipográfico hace referencia a una variable no definida (un error de compilación) en lugar de producir silenciosamente una cadena incorrecta. Desaparece toda la categoría de errores causados por claves de cadena.

// c.get(LogerToken) -> compile error: LogerToken is not defined

Equivalente en InversifyJS

Inversify también admite tokens de tipo símbolo, y existen auxiliares de la comunidad que añaden envoltorios tipados. El principio es idéntico: vincular un token tipado con una implementación y resolverlo con el tipo correcto.

import { Container } from "inversify";
const TYPES = { Logger: Symbol.for("Logger") };
// container.bind<Logger>(TYPES.Logger).to(ConsoleLogger)

Un registro de tokens

Centralizar los tokens en un único módulo proporciona una única fuente de verdad, lo que facilita descubrirlos, refactorizarlos y mantener su coherencia en todo el código base.

export const TOKENS = {
  Logger: token<Logger>("Logger"),
  Mailer: token<Mailer>("Mailer"),
};

Resumen de ventajas

Los tokens tipados proporcionan una identidad única (símbolos), seguridad en tiempo de compilación (se rechazan las incompatibilidades), tipos resueltos correctos (sin any) y protección contra errores tipográficos (errores de variable no definida).

Comprobación rápida

Comprobación rápida de esta lección.

Resumen

Los tokens de servicio con seguridad de tipos envuelven un symbol único con un tipo fantasma, asociando cada token con el tipo al que se resuelve. get devuelve el tipo preciso, el binding exige implementaciones compatibles y los errores tipográficos se convierten en errores de compilación en lugar de errores silenciosos de búsqueda por cadena.

Preguntas frecuentes

¿La lección «Tokens de servicio seguros» es gratis?

Sí — el texto completo de «Tokens de servicio seguros» 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 «Tokens de servicio seguros»?

Utilice tokens tipados para evitar errores de resolución en tiempo de ejecución. 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 4 de 4.

¿Cuánto tiempo toma la lección «Tokens de servicio seguros»?

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. Conceptos básicos de inversión de control
  2. Inyección mediante constructor
  3. Contenedores de DI con InversifyJS
  4. Tokens de servicio seguros
← Volver a TypeScript Academy