为 HTMLCanvasElement.toBlob 回调和 URL.createObjectURL 设置类型
Set Types for HTMLCanvasElement.toBlob callback and URL.createObjectURL
我正在使用 React 和 Typescript 来处理图像。我从 react-easy-crop 中找到了 this 很棒的 CodeSandbox,他们有一个使用以下代码片段的 utils 文件:
return new Promise((resolve) => {
canvas.toBlob((file) => {
resolve(URL.createObjectURL(file));
}, 'image/png');
});
此片段引发以下 Typecsript 错误,抱怨传递给 URL.createObjectURL(file)
的文件参数:'Blob | null' 类型的参数不可分配给 'Blob | MediaSource' 类型的参数。
类型 'null' 不可分配给类型 'Blob | MediaSource'.ts(2345)
As URL.createObjectURL() 期待像 Blob 这样的类型 | MediaSource,我试过这样给回调函数参数这个类型:
return new Promise((resolve) => {
canvas.toBlob((file: Blob | MediaSource) => {
resolve(URL.createObjectURL(file));
}, 'image/png');
});
但这会引发一个新的 Typescript 错误:“(file: Blob | MediaSource) => void”类型的参数不可分配给 'BlobCallback' 类型的参数。
参数类型 'file' 和 'blob' 不兼容。
类型 'Blob | null' 不可分配给类型 'Blob | MediaSource'。
类型 'null' 不可分配给类型 'Blob | MediaSource'.ts(2345)
谁能告诉我如何处理文件参数的类型?谢谢。
抱怨file
可以为null,传入URL.createObjectURL
可不是什么好事。
如果您知道它永远不会为空,请使用断言:
return new Promise((resolve) => {
canvas.toBlob((file) => {
resolve(URL.createObjectURL(file!));
// ^ '!' used as assertion
}, 'image/png');
});
否则先用if语句适当处理
我正在使用 React 和 Typescript 来处理图像。我从 react-easy-crop 中找到了 this 很棒的 CodeSandbox,他们有一个使用以下代码片段的 utils 文件:
return new Promise((resolve) => {
canvas.toBlob((file) => {
resolve(URL.createObjectURL(file));
}, 'image/png');
});
此片段引发以下 Typecsript 错误,抱怨传递给 URL.createObjectURL(file)
的文件参数:'Blob | null' 类型的参数不可分配给 'Blob | MediaSource' 类型的参数。
类型 'null' 不可分配给类型 'Blob | MediaSource'.ts(2345)
As URL.createObjectURL() 期待像 Blob 这样的类型 | MediaSource,我试过这样给回调函数参数这个类型:
return new Promise((resolve) => {
canvas.toBlob((file: Blob | MediaSource) => {
resolve(URL.createObjectURL(file));
}, 'image/png');
});
但这会引发一个新的 Typescript 错误:“(file: Blob | MediaSource) => void”类型的参数不可分配给 'BlobCallback' 类型的参数。 参数类型 'file' 和 'blob' 不兼容。 类型 'Blob | null' 不可分配给类型 'Blob | MediaSource'。 类型 'null' 不可分配给类型 'Blob | MediaSource'.ts(2345)
谁能告诉我如何处理文件参数的类型?谢谢。
抱怨file
可以为null,传入URL.createObjectURL
可不是什么好事。
如果您知道它永远不会为空,请使用断言:
return new Promise((resolve) => {
canvas.toBlob((file) => {
resolve(URL.createObjectURL(file!));
// ^ '!' used as assertion
}, 'image/png');
});
否则先用if语句适当处理