angular - Fel vid användning av ES Modul-import för object-set-all-values-to


I ett Angular 6-projekt försöker jag använda npm-paketet object-set-all-values-to 3.9.45. Jag gjorde följande:

1- Installerade det med npm i object-set-all-values-to ✔️ OK

2- Försökte importera det ❌ Fel

  • 1:a alternativ
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';`
  • Andra alternativet:
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';`

Så, hur kan jag lösa detta problem❔

Detta alternativ (const setAllValuesTo=require('object-set-all-values-to');) fungerar men jag kan inte använda det på grund av strikta kodstilregler i mitt projekt.

Jag har redan försökt utan framgång det som föreslås för att lösa liknande problem i:

  • Kunde inte hitta en deklarationsfil för modulen 'module-name'. '/path/to/module-name.js' har implicit typen 'any'

Till exempel, sätt ovanför importraden // @ts-ignore och deklarera också modulen i en src/typings.d.ts-fil:

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

Dessa ger mig följande fel: object_set_all_values_to_1.default is not a function.

Jag försökte också npm install @types/object-set-all-values-to men det verkar som att det inte finns några typer definierade för det eftersom jag får npm ERR! code E404.

Några eventuellt relevanta konfigurationsvärden i tsconfig.json är:

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

Jag försökte ändra noImplicitAny till false och felet som rapporterades försvann men jag får det nämnda object_set_all_values_to_1.default är inte en funktion

Jag rapporterade redan problemet till paketets författare men har inte fått något svar än.

Svar #1

Om compilerOptions.module är commonjs, används en UMD-modul. I detta fall, importera detta bibliotek som

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

Svar #2

Om man tittar på din konfiguration, tror jag att problemet ligger i moduldefinitionskonfigurationen som är inställd på commonjs, ändra den till esnext:

"module": "esnext"