Aquí configuro la función 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); }) muestra que el tipo de reader.result es string | ArrayBuffer | null , sin embargo, cuando necesito usar la respuesta.
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 ); } dijo que el result type is unknown , y configuré imageBase64 en cadena, Type 'unknown' is not assignable to type 'string' .
Eso es realmente extraño, ¿cómo puedo resolver este problema? Solo necesito el resultado de la cadena.
No ha especificado el tipo de Promise devuelto por su función, por lo que el valor predeterminado es Promise<unknown> . Promise es un tipo genérico, por lo que una promesa de una cadena es Promise<string> .
Puede anotar esto en el constructor de la promesa o en el tipo de retorno de la función y TypeScript lo deducirá por usted.
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); }) }Debe usar la aserción de tipo para especificar el tipo de value en la devolución de llamada lambda. Actualmente es unknown por defecto.
((value:string) => this.imageBase64=value)