Tìm kiếm trang web

aws lambda - Tại sao TypeScript không trả về APIGatewayProxyStructuredResultV2 cho một bộ xử lý API được bao bọc trong một bộ xử lý khác?


Tôi đang cố gắng viết một hàm bao quanh các handler của AWS Lambda và thực hiện một số việc ghi log. Các Lambda này được liên kết với API Gateway nên tôi đã sử dụng kiểu APIGatewayProxyHandlerV2 từ gói @types/aws-lambda.

Hàm mà tôi có trông giống như dưới đây.

import { APIGatewayProxyHandlerV2 } from "aws-lambda";

const wrapApiHandler = (apiHandler: APIGatewayProxyHandlerV2) => {
  const wrappedHandler: APIGatewayProxyHandlerV2 = async (
    event,
    context,
    callback
  ) => {
    try {
      const result = await apiHandler(
        event,
        context,
        callback
      );

      console.log(result);

      return result;
    } catch (err) {
      console.error(err);

      return {
        statusCode: 500,
        body: JSON.stringify({
          error: "Failed to process request",
        }),
      };
    }
  };

  return wrappedHandler;
};

Khi tôi cố gắng thực hiện điều trên, TypeScript báo lỗi về wrappedHandler với thông điệp dưới đây.

Type '(event: APIGatewayProxyEventV2, context: Context, callback: Callback<APIGatewayProxyResultV2<never>>) => Promise<...>' is not assignable to type 'APIGatewayProxyHandlerV2<never>'.
  Type 'Promise<void | APIGatewayProxyResultV2<never>>' is not assignable to type 'void | Promise<APIGatewayProxyResultV2<never>>'.
    Type 'Promise<void | APIGatewayProxyResultV2<never>>' is not assignable to type 'Promise<APIGatewayProxyResultV2<never>>'.
      Type 'void | APIGatewayProxyResultV2<never>' is not assignable to type 'APIGatewayProxyResultV2<never>'.
        Type 'void' is not assignable to type 'APIGatewayProxyResultV2<never>'.ts(2322)

Điều tôi cần là TypeScript nhận ra rằng một kiểu APIGatewayProxyStructuredResultV2 được trả về nhưng tôi không thấy lý do tại sao điều này lại không xảy ra.

Tôi có thể thấy những điều sau...

type APIGatewayProxyHandlerV2<T = never> = Handler<APIGatewayProxyEventV2, APIGatewayProxyResultV2<T>>;

export type APIGatewayProxyResultV2<T = never> = APIGatewayProxyStructuredResultV2 | string | T;

Tôi có đang bỏ sót điều gì không?