Тип «ReadStream» не может быть назначен типу «string».ts(2322)

Я пытаюсь запустить следующий код:

      const uploadParams = {Bucket: bucketName, Key: '', Body: ''};
const file = '/home/a/bars/img1.png';

const fileStream = fs.createReadStream(file);
fileStream.on('error', function(err) {
  console.log('File Error', err);
});
uploadParams.Body = fileStream;
var path = require('path');
uploadParams.Key = path.basename(file);

Но я получаю следующую ошибку вuploadParams.Body = fileStream;строка кода:

      Type 'ReadStream' is not assignable to type 'string'.ts(2322)

Как я могу это исправить?

1 ответ

Просто укажите, какого типа объект-ключBodyможно держать так:

      { Bucket: string; Key: string; Body: string | ReadStream }

Решение:

      import fs, { ReadStream } from "fs";
import path from "path";

const bucketName = '';
const uploadParams: { Bucket: string; Key: string; Body: string | ReadStream } = {
  Bucket: bucketName,
  Key: '',
  Body: '',
};
const file = '/home/a/bars/img1.png';

const fileStream = fs.createReadStream(file);
fileStream.on('error', function (err) {
  console.log('File Error', err);
});
uploadParams.Body = fileStream;
uploadParams.Key = path.basename(file);

Или если вы используетеrequireвы можете использоватьtypeofключевое слово:

      // { Bucket: string; Key: string; Body: string | typeof ReadStream } 

const { ReadStream } = require("fs");
const fs = require("fs");
const path = require("path");

const bucketName = '';
const uploadParams: { Bucket: string; Key: string; Body: string | typeof ReadStream } = {
  Bucket: bucketName,
  Key: '',
  Body: '',
};
const file = '/home/a/bars/img1.png';

const fileStream = fs.createReadStream(file);
fileStream.on('error', function (err) {
  console.log('File Error', err);
});
uploadParams.Body = fileStream;
uploadParams.Key = path.basename(file);

Хотя мне кажется странным, что вы используете пустую строку для хранения потока. Почему бы просто не сделать?

      const uploadParams: { Bucket: string; Key: string; Body: null | ReadStream } = {
  Bucket: bucketName,
  Key: '',
  Body: null,
};

Демо - TS Playground

Другие вопросы по тегам