typescript - "Denne syntaksen krever en importert hjelpefunksjon, men modul 'tslib' kan ikke bli funnet" med ES2015-moduler


Jeg har et demoprosjekt jeg er i ferd med å kompilere til ES5 med ES2015-moduler aktivert og tslib brukt for eksterne TS-hjelpere:

package.json

{
  "name": "foo",
  "scripts": {
    "build": "tsc"
  },
  "dependencies": {
    "tslib": "^1.9.3"
  },
  "devDependencies": {
    "typescript": "^3.1.3"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "es2015",
    "outDir": "./lib",
    "rootDir": "./src",
    "importHelpers": true,
    "strict": true,
    "experimentalDecorators": true
  }
}

src/index.ts

function a(target: any) {
    return target;
}

@a
export class Foo {}

Dette resulterer i en feil:

src/index.ts:5:1 - feil TS2354: Denne syntaksen krever en importert hjelpefunksjon, men modulen 'tslib' kan ikke finnes.

Mens lib/index.js er korrekt kompilert:

import * as tslib_1 from "tslib";
function a(target) {
    return target;
}
var Foo = /** @class */ (function () {
    function Foo() {
    }
    Foo = tslib_1.__decorate([
        a
    ], Foo);
    return Foo;
}());
export { Foo };

Hvordan kan dette problemet løses?

Svar #1

Problemet for meg var at redaktøren brukte en annen TypeScript-versjon enn prosjektet.

For å fikse det:

  1. Åpne kommandopalett (Cmd+Shift+P på Mac. Fokusert fil må være .ts eller .tsx, ellers vil ikke alternativet for å endre versjon vises)
  2. Velg "TypeScript: Velg TypeScript-versjon..."
  3. Det viser VSCode sin TS-versjon og arbeidsområdets (prosjektets) versjon, velg den (Merk: dette forutsetter at du har npm installet pakkene i arbeidsområdet)

  4. Eller klikk på versjonsnummeret i bunnlinjen hvis det vises der:

Svar #2

Prøv noe som:

npm install tslib --save-dev

Eller, for å fikse nybegynnerfeil (som jeg nettopp gjorde):

npm i

Jeg mener, personlig før jeg logget av på fredag, kjørte jeg en git clean -fxd, men ingen npm i, så alle npm-pakkene manglet. Doh!

Svar #3

Legg til følgende linjer i tsconfig.json

"compilerOptions": {
    //...rest parameters

    "baseUrl": "./",
    "paths": {
      "tslib" : ["path/to/node_modules/tslib/tslib.d.ts"]
    },

Svar #4

I mitt tilfelle løste det problemet å fjerne eller sette importHelpers-kompilatoralternativet til false.

{
  "compilerOptions": {
    ...
    "importHelpers": false, // Or remove this
    ...
  }
}

Svar #5

I mitt tilfelle var tslib allerede installert, og jeg så denne feilen bare for én komponent mens alt annet fungerte fint - bygg og funksjonalitet. Jeg bare startet VSCode på nytt, og den forsvant. Så prøv det hvis feilen fortsatt er der etter at du har gjort det andre har foreslått.

Svar #6

Oppdaterte nettopp tslib til nyeste versjon, og problemet ble løst. Jeg hadde installert 1.9.3, og oppdaterte til 1.10.0.

Svar #7

Som referansen sier, er moduloppløsning satt til Node-modus kun for "modules": "commonjs", og er satt til klassisk modus for "modules": "es2015":

Det finnes to mulige strategier for moduloppløsning: Node og Classic. Du kan bruke --moduleResolution-flagget for å spesifisere moduloppløsningsstrategien. Hvis det ikke er spesifisert, er standard Classic for --module AMD | System | ES2015 eller Node ellers.

Siden klassisk modus ikke er klar over node_modules, kan ikke kompilatoren løse tslib-modulen.

moduleResolution bør settes eksplisitt for ES2015-moduler:

...
"module": "es2015",
"moduleResolution": "node",
...

Svar #8

Feilen min så ut til å være sporadisk, men sannsynligvis forårsaket av redigering av en fil i "node_modules"-mappen.

Jeg slettet

  • "node_modules"-mappe
  • «package-lock.json»-fil

Kjør ... "npm install"

Det fungerer nå.

MERK: Jeg prøvde å kjøre "npm install" før jeg slettet filene, og det løste ikke problemet.

Relaterte artikler