Saltar al contenido principal
JavaScript

Solución: TypeError — X is not a function en JavaScript

JavaScript lanza 'is not a function' cuando intentas llamar como función algo que no lo es. Las causas más frecuentes y cómo depurarlo rápido.

Error: Uncaught TypeError: X is not a function

¿Por qué ocurre?

Estás usando el operador () para llamar a algo que no es una función en ese momento: puede ser undefined, null, un número, un objeto o una función que se sobreescribió accidentalmente. También ocurre por shadowing de nombres (una variable local tapa una función del mismo nombre) o por importar incorrectamente un módulo.

Solución paso a paso

Paso 1 — Comprueba qué es realmente esa variable:

console.log(typeof miVariable); // Si no es "function", ese es el problema
console.log(miVariable);        // Ver el valor exacto

Caso más común — llamar a un método que no existe en ese tipo:

// ❌ .map() no existe en objetos
const datos = { a: 1, b: 2 };
datos.map(x => x);  // TypeError: datos.map is not a function

// ✅ Convierte a array primero Object.values(datos).map(x => x);

// ❌ .toUpperCase() solo existe en strings const num = 42; num.toUpperCase(); // TypeError

// ✅ Convierte antes String(num).toUpperCase();

Caso — importación incorrecta de función:

// Si el módulo exporta un objeto con la función:
// módulo.js → export default { miFuncion: () => {} }

// ❌ Importas el objeto pero lo llamas directamente import miFuncion from './modulo'; miFuncion(); // TypeError — es un objeto, no una función

// ✅ Desestructura correctamente import { miFuncion } from './modulo'; miFuncion();

Caso — callback no llegó como función:

// ❌ Si onSubmit es undefined porque no se pasó como prop
function Formulario({ onSubmit }) {
  return ;
  // TypeError si el padre no pasó onSubmit
}

// ✅ Comprueba antes de llamar function Formulario({ onSubmit }) { const handleClick = () => { if (typeof onSubmit === 'function') onSubmit(datos); }; return ; }

Caso — shadowing de nombre:

// ❌ La variable local tapa la función global
function procesarDatos() {
  const parseInt = 42;  // ← tapa window.parseInt
  return parseInt('10'); // TypeError: parseInt is not a function
}

Cómo evitarlo en el futuro

Usa TypeScript o JSDoc para que el editor avise antes de que explote en runtime. Cuando una función recibe callbacks, valida con `typeof cb === 'function'` antes de llamarlos. Evita nombres de variables que coincidan con funciones nativas (parseInt, fetch, map...).

JavaScriptTypeErrorErrordebugging

¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:

Generador de Prompts

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.