我在 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!;
这可行,但我希望它能够正确键入。
事件上的
queryStringParameters
字段使用以下接口:
export interface APIGatewayProxyEventQueryStringParameters {
[name: string]: string | undefined;
}
就其本质而言,密钥可以是您想要的任何东西。
以你为例:
const code = queryStringParameters.code;
const state = queryStringParameters.state;
这并没有什么问题。
code
或 state
的值可以是字符串,也可以是未定义的,由接口指定。
因此任何使用
code
或 state
的下游代码必须将它们作为可选变量接收,或者