useUnknownInCatchVariables
Lo lanzado no es un Error
JavaScript puede lanzar cualquier cosa —un string, undefined, un número—, así que el valor capturado es `unknown` y no `any`.
- Desde
- TypeScript 4.4
- strict
- En strict
- En tu tsconfig
"useUnknownInCatchVariables": true- Compilado con
"strict": true
El mismo fragmento las dos veces. Solo cambió la opción.
Con ella apagada
"useUnknownInCatchVariables": falseexport function run() { try { throw new Error('boom') } catch (error) { return error.message } }
Compila limpio
Con ella encendida
"useUnknownInCatchVariables": trueexport function run() { try { throw new Error('boom') } catch (error) { return error.message } }
Emite TS18046
Por qué al compilador le importa
`error.message` sobre un valor capturado es la suposición sin comprobar más común en un código tipado, y se equivoca mucho más de lo que parece: una promesa rechazada con un string, una biblioteca lanzando un objeto plano, un `null` de código anterior a todo esto. `unknown` fuerza el estrechamiento que siempre hizo falta —`error instanceof Error`— y cuesta una línea en cada catch, una vez.
Conclusión
Estréchalo una vez en la frontera, no en cada uso dentro del bloque.
Adónde ir después
22 opciones

