L'errore più diffuso nell'intero ecosistema JavaScript: compare quando si tenta di accedere a una proprietà, indice o metodo su una variabile che vale 'undefined' (es. 'obj.user.name' quando 'obj.user' è omesso); si risolve con l'optional chaining '?. (obj?.user?.name)'.
TYPEERROR_UNDEFINED_PROP
→
Compare quando si tenta di assegnare un valore a una proprietà nidificata ('user.profile.age = 30') ma l'oggetto intermedio ('user.profile') non è stato inizializzato e vale 'undefined'.
TYPEERROR_SET_UNDEFINED
→
Le classi definite con la sintassi ES6 'class Foo { ... }' richiedono obbligatoriamente l'operatore 'new Foo()'; chiamarle come una normale funzione ('Foo()') genera TypeError.
TYPEERROR_CLASS_CONSTRUCTOR_NO_NEW
→
La funzione 'JSON.stringify()' fallisce e solleva TypeError quando l'oggetto passato contiene riferimenti circolari (un nodo figlio punta a un nodo padre); si risolve rimuovendo i cicli o usando una funzione 'replacer' personalizzata.
TYPEERROR_CIRCULAR_JSON
→
Compare quando un metodo nativo del browser che dipende internamente da 'this' (come 'document.querySelector' o 'window.alert') viene estratto in una variabile separata ('const q = document.querySelector; q("div")') senza essere associato tramite '.bind(document)'.
TYPEERROR_ILLEGAL_INVOCATION
→
Invocare 'arr.reduce((acc, val) => acc + val)' su un array privo di elementi senza passare il secondo parametro (valore iniziale 'reduce(..., 0)') genera questo errore a runtime.
TYPEERROR_REDUCE_EMPTY
→
Si verifica quando si tenta di invocare con le parentesi tonde '()' una variabile che contiene undefined, un oggetto, una stringa o un numero anziché una funzione eseguibile (spesso dovuto a errori di importazione o disallineamento nei nomi).
TYPEERROR_NOT_A_FUNCTION
→
Si manifesta quando si tenta di utilizzare un ciclo 'for...of' o lo spread operator '[...x]' su un valore numerico, undefined, null o su un normale oggetto literal che non implementa 'Symbol.iterator' (come Array, Set, Map o String).
TYPEERROR_NOT_ITERABLE
→