类型"未知"不可分配给类型"字符串"



这里我设置了函数toBase64()

export function toBase64(file:File) {

return new Promise((resolve,reject)=>{

const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload=()=> resolve(reader.result);
reader.onerror=(error) =>reject(error);
})

表明reader.result的类型为string | ArrayBuffer | null,然而,当我需要使用响应。

export class InputImgComponent implements OnInit {
constructor() { }
imageBase64!:string;
@Output()
onImageSelected = new EventEmitter<File>();

ngOnInit(): void {
}
change(event:any){
if(event.target.files.length>0) {
const file:File= event.target.files[0];
toBase64(file).then((value)=>this.imageBase64=value ); 
}

它说的是result type is unknown,我把imageBase64设置为string,Type 'unknown' is not assignable to type 'string'

这真的很奇怪,我怎么解决这个问题,我只需要字符串的结果。

您没有指定函数返回的Promise的类型,因此它默认为Promise<unknown>Promise是泛型类型,所以承诺的字符串是Promise<string>

你可以在promise的构造函数中注释this,也可以在函数的返回类型中注释this, Typescript会为你推断它。

export function toBase64(file:File) {
return new Promise<string>((resolve,reject) => {
const reader = new FileReader();
// the docs say that result should always be a string, but double-check for future-proofing
reader.onload = (ev) => typeof reader.result === "string" ? resolve(reader.result) : reject("Unexpected type received from FileReader");
reader.onerror = (error) => reject(error);
reader.readAsDataURL(file);
})
}

您需要使用类型断言来指定lambda回调中value的类型。当前默认为unknown

((value:string) => this.imageBase64=value)

相关内容

最新更新