Typescript 这些类型脚本函数可以被清理或简化吗?

Typescript 这些类型脚本函数可以被清理或简化吗?,typescript,Typescript,我有两个功能: import { handler } from '../lib/handler-lib' import { APIGatewayEvent, Context } from 'aws-lambda' export const producer = handler(async ( _event: APIGatewayEvent, _context: Context ): Promise<object> => { return { some: '

我有两个功能:

import { handler } from '../lib/handler-lib'
import { APIGatewayEvent, Context } from 'aws-lambda'

export const producer = handler(async (
  _event: APIGatewayEvent,
  _context: Context
): Promise<object> => {
  return {
    some: 'data result'
  }
})
从“../lib/handler lib”导入{handler}
从“aws lambda”导入{APIGatewayEvent,Context}
导出常量生产者=处理程序(异步(
_事件:APIGatewayEvent,
_上下文:上下文
):承诺=>{
返回{
一些:“数据结果”
}
})
导入{
APIGatewayEvent,
APIGatewayProxyResult,
上下文
}来自aws lambda
导出常量处理程序=(lambda:Function):对象=>{
异步返回(
事件:APIGatewayEvent,
上下文:上下文
):承诺=>{
让身体:物体
让状态代码:编号
试一试{
body=等待lambda(事件、上下文)
状态代码=200
}捕获(e){
正文={错误:e.message}
状态代码=500
}
返回{
body:JSON.stringify(body),
状态码
}
}
}
这能简化吗

这两个函数都定义了
事件
上下文
的类型,如果第二个函数这样做,那么所有调用方都可以免费获得类型声明,那就太好了


是否应该定义
lambda:Function
的参数?

首先,我将使用输入和输出值更清楚地定义
lambda
函数

lambda:(e:APIGatewayEvent,ctx:Context)=>Promise

您还可以通过简单返回而不创建临时变量,使代码更加简洁:

import {
  APIGatewayEvent,
  APIGatewayProxyResult,
  Context
} from 'aws-lambda'

export const handler = (lambda: (e: APIGatewayEvent, ctx: Context) => Promise<any>): object => {
  return async (
    event: APIGatewayEvent,
    context: Context
  ): Promise<APIGatewayProxyResult> => {
    try {
      return {
          body: JSON.stringify(await lambda(event, context)),
          statusCode: 200
      } 
    } catch (e) {
         return {
          body: JSON.stringify({ error: e.message }),
          statusCode: 500
      } 
    }
  }
}
导入{
APIGatewayEvent,
APIGatewayProxyResult,
上下文
}来自aws lambda
导出常量处理程序=(lambda:(e:APIGatewayEvent,ctx:Context)=>Promise):对象=>{
异步返回(
事件:APIGatewayEvent,
上下文:上下文
):承诺=>{
试一试{
返回{
body:JSON.stringify(等待lambda(事件、上下文)),
状态代码:200
} 
}捕获(e){
返回{
正文:JSON.stringify({error:e.message}),
状态代码:500
} 
}
}
}

是的,如果您想使用类型对象或类型函数,通常很少会使用,例如,不要做
Promise
或this
l(lambda:Function):对象
。他们不会做你认为他们会做的事。
import {
  APIGatewayEvent,
  APIGatewayProxyResult,
  Context
} from 'aws-lambda'

export const handler = (lambda: (e: APIGatewayEvent, ctx: Context) => Promise<any>): object => {
  return async (
    event: APIGatewayEvent,
    context: Context
  ): Promise<APIGatewayProxyResult> => {
    try {
      return {
          body: JSON.stringify(await lambda(event, context)),
          statusCode: 200
      } 
    } catch (e) {
         return {
          body: JSON.stringify({ error: e.message }),
          statusCode: 500
      } 
    }
  }
}