Cambié tsconfig.json agregando estas propiedades
"esModuleInterop": true, "allowSyntheticDefaultImports": true,
para poder importar un paquete npm import * as ms from "ms";
Pero sigo recibiendo este error.
This module is declared with using 'export =', and can only be used with a default import when using the 'allowSyntheticDefaultImports' flag.¿Qué me estoy perdiendo?
Actualizar:
Si cambio con import ms from "ms" , entonces funciona bien con el compilador pero no con VSCode linter y el error es
can only be default-imported using the 'allowSyntheticDefaultImports' flagts(1259) index.d.ts(25, 1): This module is declared with using 'export =', and can only be used with a default import when using the 'allowSyntheticDefaultImports' flag.Como dije, ahora está funcionando, pero VSCode tiene un problema.
El problema es cómo el paquete declaró la exportación, aún puede importar usando la importación predeterminada:
import ms from "ms";Si tiene este error al intentar importar localforage en angular 9, usé esto (Angular 9.1.12, Typescript 3.9.6):
npm instalar forraje local
// tsconfig.json
{ "compileOnSave": false, "compilerOptions": { "baseUrl": "./", "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, "downlevelIteration": true, "experimentalDecorators": true, "module": "esnext", "moduleResolution": "node", "importHelpers": true, "target": "es2015", "lib": [ "es2018", "dom" ] }, "angularCompilerOptions": { "fullTemplateTypeCheck": true, "strictInjectionParameters": true, "esModuleInterop": true, <----------------------------add this "allowSyntheticDefaultImports": true <----------------------------and this }, }// cualquier componente o servicio
import * as localforage from 'localforage'; constructor() { localforage.setItem('localforage', 'localforage value'); setTimeout(() => { localforage.getItem('localforage').then((e) => { console.log(e); }); }, 5000); setTimeout( async () => { const RES = await localforage.getItem('localforage'); console.log('RES', RES); }, 10000); }Puedes hacer algo como esto
import * as printJS from 'print-js'Tener el mensaje de error
Este módulo se declara con el uso de 'export =', y solo se puede usar con una importación predeterminada cuando se usa el indicador 'allowSyntheticDefaultImports'.
en una regla de importación mecanografiada para un componente Angular:
import { something } from 'amodule';en node_modules/@types/amodule/index.d.ts, encontré este código:
declare module 'amodule' { export = something; }y lo cambié a:
declare module 'amodule' { export default something; }la regla de importación en el componente angular se cambió a:
import something from 'amodule';y el mensaje de error desaparece y el módulo importado se puede usar como se esperaba.
"allowSyntheticDefaultImports": true
Este indicador resolvió el problema, pero debe agregarse a la sección compilerOptions de tsconfig.json