Búsqueda de sitios web

angular - Error al usar la importación de módulo ES para object-set-all-values-to


En un proyecto de Angular 6 estoy tratando de usar el paquete npm object-set-all-values-to 3.9.45. Hice lo siguiente:

1- Instalado usando npm i object-set-all-values-to ✔️ OK

2- Intenté importarlo ❌ Error

  • 1.ª opción
import setAllValuesTo from 'object-set-all-values-to';
Could not find a declaration file for module 'object-set-all-values-to'. '<my-project-path>/node_modules/object-set-all-values-to/dist/object-set-all-values-to.cjs.js' implicitly has an 'any' type.
  Try `npm install @types/object-set-all-values-to` if it exists or add a new declaration (.d.ts) file containing `declare module 'object-set-all-values-to';`
  • Segunda opción:
import setAllValuesTo from 'object-set-all-values-to/dist/object-set-all-values-to.esm.js';
Could not find a declaration file for module 'object-set-all-values-to'. '<my-project-path>/node_modules/object-set-all-values-to/dist/object-set-all-values-to.esm.js' implicitly has an 'any' type.
  Try `npm install @types/object-set-all-values-to` if it exists or add a new declaration (.d.ts) file containing `declare module 'object-set-all-values-to/dist/object-set-all-values-to.esm.js';`

Entonces, ¿cómo puedo resolver este problema?❔

Esta alternativa (const setAllValuesTo=require('object-set-all-values-to');) funciona pero no puedo usarla debido a las estrictas reglas de estilo de código en mi proyecto.

Ya intenté sin éxito lo que se propone para resolver problemas similares en:

  • No se pudo encontrar un archivo de declaración para el módulo 'module-name'. '/path/to/module-name.js' tiene implícitamente un tipo 'any'

Por ejemplo, coloca encima de la línea de importación // @ts-ignore y también declara en un archivo src/typings.d.ts el módulo:

declare module 'object-set-all-values-to' {
    export default function setAllValuesTo(inputOriginal: any, valueOriginal: any): any
}

Estos me dan el siguiente error: object_set_all_values_to_1.default no es una función.

Además, intenté npm install @types/object-set-all-values-to pero parece que no hay tipos definidos para ello porque obtengo npm ERR! code E404.

Algunos valores de configuración posiblemente relevantes en tsconfig.json son:

{
    "compilerOptions": {
        // ...
        "lib": [
            "dom",
            "es2018.promise",
            "es2015"
        ],
        "moduleResolution": "node",
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": true,
        // ...
    }
}

Intenté cambiar noImplicitAny a false y el error informado desapareció, pero obtengo el mencionado object_set_all_values_to_1.default no es una función

Ya informé el problema al autor del paquete, pero hasta ahora no he recibido respuesta.

Respuesta #1

Si compilerOptions.module es commonjs, se usa un módulo UMD. En este caso, importe esta biblioteca como

import * as setAllValuesTo from 'object-set-all-values-to';

Respuesta #2

Mirando tu configuración, creo que el problema está en la configuración de la definición del módulo que está establecida en commonjs, cámbiala a esnext:

"module": "esnext"