如何使用打字稿访问 AWS SQS SendMessageResult 中的 $response 属性?

问题描述

我正在用打字稿向 SQS 队列发送消息,如下所示:

const queueName = 'some_queue_name';
const foo = 'foo';
const bar = 'bar';

const sqs = new AWS.SQS();
const SendMessageRequest: AWS.SQS.SendMessageRequest = {
  MessageBody: JSON.stringify({ foo,bar }),QueueUrl: queueName,};

try {
  const request = sqs.sendMessage(SendMessageRequest,function (err,data) {
    if (err) {
      console.log('Error',err);
    } 
  });

  const smgResponse: SendMessageResult = await request.promise();

} catch (err) {
  console.log(err);
  expect(err).toBeUndefined();
}

在运行时,SendMessageRequest 显示一个 $response 属性,但这在对象定义中不可见。在运行时访问此属性的最佳方法是什么?

解决方法

使用 type assertion

const smgResponse = await request.promise() as SendMessageResult & {$response: unknown}

unknown 替换为运行时的任何类型 $response

如果你做了很多断言,你可以为此创建一个新类型:

interface SendMessageResultWithResponse extends {
  $response: unknown
}

// alternatively type SendMessageResultWithResponse = SendMessageResult & {$response: unknown}

const smgResponse = await request.promise() as SendMessageResultWithResponse