Búsqueda de sitios web

aws sdk js - Manejo de errores de AWS SDK v3 - no se puede usar instanceof con TypeScript


He usado AWS SDK para JavaScript antes muchas veces, pero en el pasado siempre he usado los patrones de la versión v2. Estoy intentando por primera vez usar el enfoque modular v3. Para el manejo de errores, estoy siguiendo esta guía.

Aquí está mi código:

import { DynamoDB, ConditionalCheckFailedException } from '@aws-sdk/client-dynamodb';
const db = new DynamoDB({region: 'us-east-1'});
try {
    const result = await db.putItem({
        TableName: myTable,
        Item: myItem,
        ConditionExpression: 'attribute_not_exists(PK)',
    });
    console.log("Inserted");
} catch (ex) {
    if(ex instanceof ConditionalCheckFailedException) {
        console.log("Already exists");
    }
    throw ex;
}

Pero desafortunadamente TypeScript no está contento con esto:

El lado derecho de una expresión 'instanceof' debe ser de tipo 'any' o de un tipo asignable al tipo de interfaz 'Function'. ts(2359)

La publicación del blog de AWS menciona específicamente TypeScript, así que espero que haya alguna manera de hacer que esto funcione. ¿Qué estoy haciendo mal?

Respuesta #1

En los documentos, dan este código de ejemplo:

try {
  const data = await client.send(command);
  // process data.
} catch (error) {
  const { requestId, cfId, extendedRequestId } = error.$$metadata;
  console.log({ requestId, cfId, extendedRequestId });
  /**
   * The keys within exceptions are also parsed.
   * You can access them by specifying exception names:
   * if (error.name === 'SomeServiceException') {
   *     const value = error.specialKeyInException;
   * }
   */
}

Así que supongo que esto funcionaría en lugar de instanceof:

if (error.name === 'ConditionalCheckFailedException') { }