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
相关产品推荐
相关产品推荐

