You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从EventBridgeEvent获取S3数据编译报错:TypeScript类型定义问题

问题分析与解决方案

错误原因

你自定义的S3EventDetail类型结构完全错误:
EventBridgeEvent<'Object Created', S3EventDetail>中,第二个泛型参数就是EventBridge事件里detail字段的类型,但你把整个EventBridge事件的完整结构(包括外层的version、id、detail-type等字段)都塞进了S3EventDetail,还额外嵌套了一层detail属性。这就导致event.detail的类型被识别为你定义的S3EventDetail,而这个类型里的bucket和object是在它自身的detail子属性下,直接写event.detail.bucket自然会触发编译错误。

运行时正常是因为实际触发的EventBridge事件结构中,event.detail确实直接包含bucket和object,但TypeScript的类型检查是编译时校验,和实际运行数据无关。

修正方案

方案1:修正自定义类型定义

只保留EventBridge事件中detail字段的内容作为S3EventDetail的直接属性:

interface S3EventDetail {
    version: string;
    bucket: {
        name: string;
    };
    object: {
        key: string;
        size: number;
        etag: string;
        'version-id': string;
        sequencer: string;
    };
    'request-id': string;
    requester: string;
    'source-ip-address': string;
    reason: string;
}

export const handler: Handler<EventBridgeEvent<'Object Created', S3EventDetail>> = async (event) => {
    // 现在编译不会报错
    const { bucket, object } = event.detail;
    console.log('Bucket Name:', bucket.name);
    console.log('Object Key:', object.key);
    // 后续逻辑
};

方案2:拆分类型更清晰

把整个EventBridge事件的类型和内部detail的类型分开定义,可读性更好:

import { EventBridgeEvent, Handler } from 'aws-lambda';

// 仅定义EventBridge事件中detail字段的结构
interface S3ObjectCreatedDetail {
    version: string;
    bucket: {
        name: string;
    };
    object: {
        key: string;
        size: number;
        etag: string;
        'version-id': string;
        sequencer: string;
    };
    'request-id': string;
    requester: string;
    'source-ip-address': string;
    reason: string;
}

// 处理器类型明确指向完整的EventBridge事件,detail部分使用上面的自定义类型
export const handler: Handler<EventBridgeEvent<'Object Created', S3ObjectCreatedDetail>> = async (event) => {
    const { bucket, object } = event.detail;
    // 业务逻辑
};

内容的提问来源于stack exchange,提问作者Sara N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:58:16