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

TypeScript上传AWS S3代码报错:Unexpected keyword等问题求助

修复AWS S3上传TypeScript代码的错误

修复后的完整代码

import AWS from 'aws-sdk';
import fs, { ReadStream } from "fs";
import path from "path";

class Uploads {
  // 静态成员使用 static readonly(不可变)或 static(可变),不能用 static const
  static readonly bucketName = "myappllbuck";
  static readonly s3 = new AWS.S3({ apiVersion: '2006-03-01' });
  static readonly filePath = "/home/s/img2.png";

  // 封装上传逻辑到静态方法中,类顶层不能直接写执行代码
  static async uploadToS3(): Promise<void> {
    // 初始化上传参数,放在方法内部避免静态上下文问题
    const uploadParams: {
      Bucket: string;
      Key: string;
      Body: ReadStream;
      ContentType: string;
      ACL: string;
    } = {
      Bucket: Uploads.bucketName,
      Key: '',
      Body: {} as ReadStream, // 先占位,后续赋值
      ContentType: '',
      ACL: 'public-read',
    };

    try {
      // 创建文件流并指定类型
      const fileStream: ReadStream = fs.createReadStream(Uploads.filePath);
      
      fileStream.on('error', (err) => {
        console.log('File Error', err);
        throw err;
      });

      // 完善上传参数
      uploadParams.Body = fileStream;
      uploadParams.Key = path.basename(Uploads.filePath);
      uploadParams.ContentType = 'image/png';
      uploadParams.ACL = 'public-read';

      // 执行S3上传
      await Uploads.s3.upload(uploadParams).promise();
      console.log('文件上传成功');
    } catch (err) {
      console.log('上传失败', err);
    }
  }
}

// 调用上传方法
Uploads.uploadToS3();

错误原因及修复说明

  • static const语法错误:TypeScript类中不支持static const声明静态成员,不可变成员用static readonly,可变成员直接用static声明。
  • 类顶层执行代码非法:类的顶层只能声明成员,所有执行逻辑必须放在方法内部。这里将上传逻辑封装到静态方法uploadToS3中,符合类的语法规范。
  • 静态成员引用错误:静态成员必须通过类名.成员名(如Uploads.bucketName)引用,不能在类顶层用this,静态方法中虽可用this,但直接用类名更清晰。
  • fileStream类型隐式any:显式指定fileStream的类型为ReadStream,解决TypeScript无法推断类型导致的隐式any错误。
  • uploadParams初始化问题:将uploadParams移至方法内部,用正确的静态成员引用初始化,同时完善类型定义,去掉any改用明确的string类型,解决对象可能未定义的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:25:25