如何通知 TypeScript 编译器所需的 AWS API Gateway 查询字符串参数

问题描述 投票:0回答:1

我在 AWS API Gateway 中创建了一个 API,其中包含一个名为

/callback
的端点。该端点是使用定义查询字符串参数的架构创建的:

export const schema = {
  'method.request.querystring.code': true,
  'method.request.querystring.state': true
}

如果查询字符串参数中不包含代码和状态,AWS 将使请求失败。

我正在使用 TypeScript 定义我的端点处理程序:

import { APIGatewayEvent } from 'aws-lambda';

export const handler = async (event: APIGatewayEvent) => {
  console.log(JSON.stringify(event, null, 4));
  const { queryStringParameters } = event;

  // These fields are required by the schema
  const code = queryStringParameters.code;
  const state = queryStringParameters.state;

  return {
    statusCode: 200,
    body: {}
  }
}

TypeScript 会引发编译错误,因为它不知道代码和状态保证存在于

queryStringParameters
上。

所以我的问题是如何通知打字稿这些值保证存在?

我目前的解决方案是

const code = queryStringParameters?.code!;
const state = queryStringParameters?.state!;

这可行,但我希望它能够正确键入。

node.js typescript amazon-web-services aws-lambda aws-api-gateway
1个回答
0
投票

事件上的

queryStringParameters
字段使用以下接口:

export interface APIGatewayProxyEventQueryStringParameters {
    [name: string]: string | undefined;
}

就其本质而言,密钥可以是您想要的任何东西。

以你为例:

const code = queryStringParameters.code;
const state = queryStringParameters.state;

这并没有什么问题。

code
state
的值可以是字符串,也可以是未定义的,由接口指定。

因此任何使用

code
state
的下游代码必须将它们作为可选变量接收,或者

  • 如果它们在使用前未定义,则添加错误处理
  • 或者继续使用!如果您保证架构中需要它们
© www.soinside.com 2019 - 2024. All rights reserved.