Type 'ReadStream'不可赋值给'string'错误(ts2322)修复咨询
修复Type 'ReadStream' is not assignable to type 'string'错误
错误原因
你定义uploadParams时,Body的初始值设为空字符串'',TypeScript会自动推断Body的类型为string。但后续你要赋值的是fs.ReadStream类型的文件流,两种类型不匹配,因此抛出类型错误。
修复方案
方案1:使用对应SDK的官方类型(推荐)
如果是使用云存储SDK(比如AWS S3),直接导入SDK提供的参数类型,确保类型匹配:
import { S3 } from 'aws-sdk'; import * as fs from 'fs'; import * as path from 'path'; const bucketName = '你的存储桶名称'; // 用SDK的PutObjectRequest类型定义参数 const uploadParams: S3.PutObjectRequest = { Bucket: bucketName, Key: '', Body: '' }; const file = '/home/a/bars/img1.png'; const fileStream = fs.createReadStream(file); fileStream.on('error', (err) => { console.log('File Error', err); }); uploadParams.Body = fileStream; uploadParams.Key = path.basename(file);
方案2:手动定义联合类型
如果没有使用SDK,可手动定义Body的类型为string | fs.ReadStream,允许它接受字符串或文件流:
import * as fs from 'fs'; import * as path from 'path'; const bucketName = '你的存储桶名称'; // 自定义参数类型 type UploadParams = { Bucket: string; Key: string; Body: string | fs.ReadStream; }; const uploadParams: UploadParams = { Bucket: bucketName, Key: '', Body: '' }; const file = '/home/a/bars/img1.png'; const fileStream = fs.createReadStream(file); fileStream.on('error', (err) => { console.log('File Error', err); }); uploadParams.Body = fileStream; uploadParams.Key = path.basename(file);
方案3:初始化时设Body为undefined(快速修复)
将Body初始值设为undefined,让TypeScript自动推断它可以接受多种类型:
import * as fs from 'fs'; import * as path from 'path'; const bucketName = '你的存储桶名称'; const uploadParams = { Bucket: bucketName, Key: '', Body: undefined }; const file = '/home/a/bars/img1.png'; const fileStream = fs.createReadStream(file); fileStream.on('error', (err) => { console.log('File Error', err); }); uploadParams.Body = fileStream; uploadParams.Key = path.basename(file);
内容的提问来源于stack exchange,提问作者best_of_man
相关产品推荐
相关产品推荐

