certmundo.
es‑mx

6 min de lectura

¿Cómo integrar TypeScript en un proyecto real con Node.js?

Integrar TypeScript en un proyecto Node.js significa configurar un entorno donde escribes código tipado, lo compilas a JavaScript y lo ejecutas con Node.

Esta lección te muestra el proceso completo paso a paso. Al terminar, tendrás una aplicación funcional lista para crecer.

Estructura de carpetas recomendada

Antes de escribir una sola línea de código, define cómo organizarás el proyecto. Una estructura clara evita confusión cuando el proyecto crece.

Usa esta organización estándar:

mi-proyecto/
├── src/
│   ├── tipos/
│   │   └── index.ts
│   ├── servicios/
│   │   └── productos.ts
│   ├── utilidades/
│   │   └── formato.ts
│   └── index.ts
├── dist/
├── package.json
└── tsconfig.json

src/ contiene todo tu código fuente en TypeScript. dist/ recibe los archivos JavaScript compilados. Nunca edites archivos dentro de dist/ directamente.

Inicializar el proyecto

Abre tu terminal y ejecuta estos comandos en orden:

mkdir mi-proyecto
cd mi-proyecto
npm init -y

Eso crea el archivo package.json con valores predeterminados. Después instala TypeScript y los tipos de Node:

npm install --save-dev typescript
npm install --save-dev @types/node

typescript es el compilador. @types/node proporciona los tipos de todas las funciones nativas de Node, como fs, path y console.

Finalmente, genera el archivo de configuración:

npx tsc --init

Eso crea un tsconfig.json con muchas opciones comentadas. Solo necesitas ajustar algunas.

Configurar tsconfig.json

Abre el archivo tsconfig.json y deja activas estas opciones clave:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "moduleResolution": "node",
    "rootDir": "./src",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}
Opción Qué hace
target: "ES2020" Compila a una versión moderna de JavaScript
module: "commonjs" Usa el sistema de módulos de Node (require)
rootDir: "./src" Indica dónde está tu código fuente
outDir: "./dist" Indica dónde se guardan los archivos compilados
strict: true Activa todas las verificaciones estrictas de tipos
esModuleInterop: true Permite importar módulos CommonJS con la sintaxis import

Configurar scripts en package.json

Agrega estos scripts dentro de tu package.json:

"scripts": {
  "build": "tsc",
  "start": "node dist/index.js",
  "dev": "tsc --watch"
}

build compila todos los archivos TypeScript. start ejecuta el resultado compilado. dev observa cambios y recompila automáticamente mientras desarrollas.

Construir una aplicación de ejemplo

Vamos a construir una pequeña aplicación que calcula el total de un pedido de una tienda. El ejemplo usa precios en pesos, como los de Liverpool o Mercado Libre.

Paso 1: Define los tipos

Crea el archivo src/tipos/index.ts:

export interface Producto {
  nombre: string;
  precio: number;
  cantidad: number;
}

export interface Pedido {
  id: string;
  cliente: string;
  productos: Producto[];
}

Paso 2: Crea el servicio de productos

Crea el archivo src/servicios/productos.ts:

import { Pedido, Producto } from "../tipos";

export function calcularTotal(pedido: Pedido): number {
  return pedido.productos.reduce((suma: number, p: Producto) => {
    return suma + p.precio * p.cantidad;
  }, 0);
}

export function aplicarDescuento(total: number, porcentaje: number): number {
  return total - (total * porcentaje) / 100;
}

Paso 3: Crea una utilidad de formato

Crea el archivo src/utilidades/formato.ts:

export function formatearPesos(cantidad: number): string {
  return "$" + cantidad.toLocaleString("es-MX", {
    minimumFractionDigits: 2,
    maximumFractionDigits: 2
  });
}

Paso 4: Escribe el punto de entrada

Crea el archivo src/index.ts:

import { Pedido } from "./tipos";
import { calcularTotal, aplicarDescuento } from "./servicios/productos";
import { formatearPesos } from "./utilidades/formato";

const pedido: Pedido = {
  id: "PED-001",
  cliente: "Ana García",
  productos: [
    { nombre: "Cafetera", precio: 1200, cantidad: 1 },
    { nombre: "Tazas (set)", precio: 350, cantidad: 2 },
    { nombre: "Molinillo", precio: 850, cantidad: 1 }
  ]
};

const total = calcularTotal(pedido);
const totalConDescuento = aplicarDescuento(total, 10);

console.log(`Cliente: ${pedido.cliente}`);
console.log(`Total sin descuento: ${formatearPesos(total)}`);
console.log(`Total con 10% de descuento: ${formatearPesos(totalConDescuento)}`);

Compilar y ejecutar

Desde la raíz del proyecto, ejecuta:

npm run build

Deberías ver la carpeta dist/ con los archivos JavaScript generados. Después ejecuta:

npm run start

La salida en consola será:

Cliente: Ana García
Total sin descuento: $2,750.00
Total con 10% de descuento: $2,475.00

Si ves esos resultados, tu proyecto TypeScript con Node.js funciona correctamente.

Errores comunes

Error 1: Olvidar instalar @types/node

Sin ese paquete, TypeScript no reconoce funciones como console.log o módulos como fs. El compilador lanza errores como Cannot find name 'console'. Solución: ejecuta npm install --save-dev @types/node.

Error 2: Ejecutar los archivos .ts directamente con Node

Node no entiende TypeScript. Si ejecutas node src/index.ts, obtendrás un error de sintaxis. Siempre compila primero con npm run build y luego ejecuta el archivo dentro de dist/.

Error 3: Rutas de importación incorrectas después de compilar

Cuando configuras rootDir y outDir, TypeScript replica la estructura de carpetas de src/ dentro de dist/. Si cambias la estructura de carpetas sin actualizar el tsconfig.json, las rutas rompen. Revisa siempre que rootDir apunte a la carpeta correcta.

Error 4: No excluir dist/ en tsconfig.json

Si olvidas agregar "dist" en la opción exclude, TypeScript intenta compilar los archivos ya compilados. Eso genera errores confusos y archivos duplicados. Asegúrate de que exclude siempre incluya "node_modules" y "dist".

Lo que aprendiste en este curso

A lo largo de las nueve lecciones cubriste los fundamentos completos de TypeScript:

  • Tipos básicos y anotaciones: string, number, boolean, array y cómo declararlos.
  • Interfaces y tipos personalizados: cómo modelar datos del mundo real, como productos de Bimbo o FEMSA.
  • Funciones tipadas: parámetros, valores de retorno y funciones opcionales.
  • Clases y herencia: programación orientada a objetos con verificación de tipos.
  • Genéricos: código reutilizable que funciona con cualquier tipo de dato.
  • Enums y tipos literales: valores fijos que evitan errores de escritura.
  • Módulos y organización: cómo dividir el código en archivos y carpetas.
  • Proyecto real con Node.js: configuración completa lista para producción.

Próximos pasos recomendados

Ahora que dominas los fundamentos, estas son las rutas naturales para continuar:

Si quieres desarrollo web: Aprende React con TypeScript. Muchas empresas mexicanas como Kueski o Clip usan esta combinación para sus aplicaciones de usuario.

Si quieres desarrollo backend: Explora frameworks como Express o Fastify con TypeScript. Puedes construir APIs REST que consuman datos del SAT o se conecten al sistema del IMSS.

Si quieres mejorar tu salario: Los desarrolladores con TypeScript en México ganan entre $18,500 y $28,000 al mes en posiciones junior a semi-senior, según reportes de bolsas de trabajo como OCC Mundial y Computrabajo.

Práctica inmediata: Toma cualquier proyecto JavaScript que hayas hecho antes y conviértelo a TypeScript. Ese ejercicio consolida todo lo aprendido mejor que cualquier tutorial.

Puntos clave

  • Instala `typescript` y `@types/node` como dependencias de desarrollo; sin `@types/node`, TypeScript no reconoce las funciones nativas de Node como `console` o `fs`.
  • Configura `rootDir: "./src"` y `outDir: "./dist"` en tu `tsconfig.json` para separar el código fuente del código compilado; nunca edites archivos dentro de `dist/`.
  • Define tres scripts en `package.json`: `build` para compilar, `start` para ejecutar y `dev` para recompilar automáticamente con `--watch` durante el desarrollo.
  • Organiza tu proyecto en carpetas `tipos/`, `servicios/` y `utilidades/` dentro de `src/` para mantener interfaces, lógica de negocio y funciones auxiliares separadas desde el inicio.
  • Node no ejecuta TypeScript directamente; siempre compila con `npm run build` antes de ejecutar el proyecto con `npm run start`.

Comparte esta lección: