问题描述
我正在用打字稿向 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