这里我设置了函数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)