He usado este método msSaveOrOpenBlob. funcionaba correctamente, pero después de actualizar el mecanografiado a la última versión, recibo varios errores, hay dos errores.
window.navigator.msSaveOrOpenBlob(datos, nombre de archivo);
error TS2322: el tipo 'Promise<>' no se puede asignar al tipo 'IPromise<>'.
Cual es el arreglo de eso.
Es mi primer desarrollo en angular más específico en la versión 12, y creé un método en un componente que hace una descarga de un archivo xlsx, en Chrome funciona pero en IE no funciona, encuentro que agregando esta window.navigator.msSaveOrOpenBlob(data, filename); Explorer puede descargar el archivo, pero en el error de marca VSC y es
La propiedad 'msSaveOrOpenBlob' no existe en el tipo 'Navegador'
y cambio el módulo y lib en tsconfig.json ,
"module": "es2020", "lib": [ "es2020", "dom" ]para:
"module": "es2015", "lib": [ "es2015", "dom" ] En el código window.navigator.msSaveOrOpenBlob VSC marca lo mismo
Propiedad 'msSaveOrOpenBlob'....'
pero cuando ejecuto ng sirve su trabajo y descargo un archivo xlsx en IE y Chrome.
msSaveOrOpenBlob fue una adición patentada al objeto Navigator , agregada por Microsoft para Internet Explorer. Dado que Microsoft está eliminando gradualmente la compatibilidad con Internet Explorer, ha eliminado la compatibilidad con muchas de las adiciones no estándar realizadas a los archivos lib.dom.d.ts y lib.es*.d.ts que se envían con TypeScript. Consulte este problema de GitHub sobre los cambios en el archivo DOM.d.ts.
Como se indica en este problema de GitHub sobre el tema , tendrá que usar la combinación de declaraciones para agregar estos tipos a Navigator usted mismo.
La respuesta de @Heretic Monkey es correcta, pero si solo quiere solucionar el problema, ya que está usando TypeScript, puede convertirlo para escribir any antes de llamar a msSaveOrOpenBlob.
(window.navigator as any).msSaveOrOpenBlob(data, filename);
Además, debe asegurarse de que el objeto del navegador tenga el método en primer lugar, por lo que:
const nav = (window.navigator as any); if (nav.msSaveOrOpenBlob) { nav.msSaveOrOpenBlob(data, filename); }