Actualicé hoy (después de un par de meses) mi archivo package.json
con las últimas versiones del paquete, creo que los que afectan este error son los que están en el tema de la pregunta.
Algunos bloques de manejo de errores como el siguiente
try { // ... } catch(err) { console.log(err.message); }
dejó de funcionar debido al error de TypeScript 2571: Object is of type 'unknown'.
¡Agradable! Solo tuve que aplicar el siguiente cambio simple:
try { // ... } catch(err) { console.log(err instanceof Error ? err.message : JSON.stringify(err)); }
no solo mi código comenzó a funcionar una vez más, sino que también siento que mi código es más resistente.
El problema surge cuando trato de manejar un error lanzado desde AWS SDK v3.
import { CloudWatchLogs, ResourceNotFoundException } from "@aws-sdk/client-cloudwatch-logs"; const cwl = new CloudWatchLogs({ region: "us-east-2" }); try { const logGroupName = "..."; const logStreamName = "..."; const { events } = await cwl.getLogEvents({ logGroupName, logStreamName }); // ... } catch(err) { if(! (err instanceof ResourceNotFoundException)) console.log(err); }
En el ejemplo de código anterior simplificado (no estoy manejando la paginación), simplemente quiero ignorar ResourceNotFoundException
, pero la err instanceof ResourceNotFoundException
check no se compila ya que ResourceNotFoundException
es una interface
en lugar de una class
.
Encontré esta respuesta que parece que podría ayudarme.
La pregunta es: ¿debo escribir una función instanceOf\w+Exception
(perdón por la expresión regular) para cada excepción de AWS que necesito manejar, o AWS proporciona una forma común y reutilizable?
La razón principal por la que busco esto no es que sea perezoso (y lo soy), pero si escribo mis propias funciones de instanceOf\w+Exception
que inspeccionan el código fuente del SDK de AWS, mis funciones pueden dejar de funcionar si Amazon lo hace. cambiar algo en el SDK.
Encontré este problema : sospecho firmemente que, en este momento, la respuesta es simplemente: no, no lo hay.
Editar: el mismo problema se resolvió y ahora podemos usar el operador instanceof
(aún no lo he probado).
Actualización 2022
AWS SDK v3 ahora está usando instanceof y desaprobando el sdkerror de mecanografiado
https://aws.amazon.com/blogs/developer/service-error-handling-modular-aws-sdk-js
import { InvalidSignatureException, ResourceNotFoundException, FooServiceException, } from "@aws-sdk/client-foo";
Obviamente reemplace foo por el cliente que está usando
try { await client.send(someCommand); } catch (e) { if (e instanceof InvalidSignatureException) { // Handle InvalidSignatureException } else if (e instanceof ResourceNotFoundException) { // Handle ResourceNotFoundException } else if (e instanceof FooServiceException) { // Handle all other server-side exceptions from Foo service } else { // Other errors } }