在const arr = new Uint8Array(fileReader.result).subarray(0, 4);
中,尤其是在第11行的fileReader.result
中,出现错误[ts]。
'string |类型的参数ArrayBuffer'不能分配给'ArrayBuffer |类型的参数。 ArrayLike | SharedArrayBuffer'。
不能将类型'string'分配给类型'ArrayBuffer | ArrayLike | SharedArrayBuffer”。
import { AbstractControl } from '@angular/forms';
import { Observable, Observer } from 'rxjs';
export const mimeType = (
control: AbstractControl
): Promise<{ [key: string]: any }> | Observable<{ [key: string]: any }> => {
const file = control.value as File;
const fileReader = new FileReader();
const frObs = Observable.create(
(observer: Observer<{ [key: string]: any }>) => {
fileReader.addEventListener('loadend', () => {
const arr = new Uint8Array(fileReader.result).subarray(0, 4);
let header = '';
let isValid = false;
for (let i = 0; i < arr.length; i++) {
header += arr[i].toString(16);
}
你们能分享一个解决方案吗?谢谢
答案 0 :(得分:11)
You can get rid of the error with appropriate type castings: e.g.
...instead of...
this.imagePreview = reader.result;
...try...
this.imagePreview = <string>.reader.result;
...or...
this.imagePreview = reader.result as string;
...or instead of...
const arr = new Uint8Array(fileReader.result).subarray(0, 4);
...write...
const arr = new Uint8Array(<ArrayBuffer>fileReader.result).subarray(0, 4);
...or...
const arr = new Uint8Array(fileReader.result as ArrayBuffer).subarray(0, 4);
I hope that this helps.
答案 1 :(得分:1)
让我们用一个较小的例子来突出这个问题。您应该从以下代码中得到相同的类型错误:
let example: string | ArrayBuffer;
function useArrayBuffer(ab: ArrayBuffer) {
return ab.byteLength;
}
useArrayBuffer(example);
这是因为example
变量可能包含string
或和ArrayBuffer
。 如果其中包含一个字符串,则传递给该函数无效,因为该函数只需要ArrayBuffer
个参数。
您可以使用类型保护来缩小类型:
let example: string | ArrayBuffer;
function useArrayBuffer(ab: ArrayBuffer) {
return ab.byteLength;
}
if (typeof example !== 'string') {
useArrayBuffer(example);
}
如果类型不是字符串,则调用就可以了。
答案 2 :(得分:0)
如果要在从输入文件控件中选择图像后直接显示图像,可以使用类似的内容...
let file = control.value as File;
let reader = new FileReader();
reader.onloadend = () => {
this.yourVarible = reader.result;;
}
reader.readAsDataURL(file);
让我知道是否需要更多说明