export function resize<T extends File | Blob>(input: T, w: number, h: number): Promise<T> {
return Promise.resolve(new File([new Blob()], 'test.jpg'))
}
错误:
(48,3)TS2322:类型'Promise'不能分配给'Promise'类型。 类型“文件”不能指定为“T”类型。
无法理解为什么?
答案 0 :(得分:0)
重点是您的通用参数T
是一个从File
或Blob
继承的类。你要归的只是一个简单的Promise<File>
。这显然不能分配给继承的类型。我不确定input
参数究竟是什么以及它如何影响输出,但返回类型肯定应该是Promise<File>
:
export function resize<T extends File | Blob>(input: T, w: number, h: number): Promise<File> {
return Promise.resolve(new File([new Blob()], 'test.jpg'))
}
答案 1 :(得分:0)
这对我有用,但这看起来很奇怪
if (isFile(input)) {
const f = new File([blob], input.name)
resolve(f as T)
} else if (isBlob(input)) {
resolve(blob as T)
}
从:
export
function resize<T extends Blob | File>(input: T, width: number, height: number): Promise<T> {
return new Promise((resolve, reject) => {
const image = new Image()
image.onload = () => {
const canvas = document.createElement('canvas')
canvas.width = width
canvas.height = height
pica.resize(image, canvas)
.then((result) => pica.toBlob(result, input.type, 85))
.then((blob: Blob) => {
if (isFile(input)) {
const f = new File([blob], input.name)
resolve(f as T)
} else if (isBlob(input)) {
resolve(blob as T)
}
})
.catch(err => reject(err))
}
image.src = URL.createObjectURL(input)
})
}