nodes - Typescript - Kan ikke finne modul 'http' i Visual Studio Code


Jeg bruker Visual Studio Code for NodeJS- og Typescript-utvikling. Hvis jeg skriver denne koden:

import * as http from 'http'; 

Kompileringen sier error TS2307: Kan ikke finne modul 'http'.

Hvordan håndtere denne feilen?

Hei

Svar #1

Dette fungerte for meg:

npm install @types/node --save

Jeg innser at det har gått en stund siden OP, men dette er et mer oppdatert svar i tilfelle noen snubler over dette problemet.

Svar #2

Oppdatert løsning

Denne feilen oppstår i Typescript fordi http og de andre modulene i Node.js er skrevet i Javascript. Typescript-kompilatoren har ikke informasjon om typene og modulene til biblioteker som er skrevet i Javascript. For å legge til denne informasjonen, må du inkludere typdeklarsjoner for Node.js i Typescript-prosjektet ditt.

Kjør følgende terminalkommando i prosjektets rotkatalog:

npm install -D @types/node

Det er det! Nå bør feilen forsvinne.


Hva skjer bak kulissene?

Kommandoen ovenfor vil laste ned typeerklæringsfiler (.d.ts) for Node.js. Nå kan du se filene i katalogen ./node_modules/@types/node i prosjektet ditt, og http.d.ts er en av dem. I denne filen vil du finne erklæringer for http-modulen og alle typene som IncomingMessage, ServerResponse og andre som brukes i HTTP-serveren. Slik bruker Typescript-kompilatoren og VS Code typeerklæringsinformasjon for å gi deg typesikkerhet.

@typer:

Det finnes et fellesskapsvedlikeholdt arkiv kalt DefinitelyTyped som inneholder typeerklæringsfiler for mange gamle og nye Javascript-biblioteker som Express, Sequelize, JQuery og mange andre. Når du spesifiserer @types-pakken i kommandoen din, betyr det at du laster ned deklarasjonstypene fra DefinitelyTyped-arkivet.

-D flagg:

Kommandoen vil også automatisk legge til typene for Node.js i devDependencies-delen av din package.json-fil som vist i følgende kodeeksempel:

{
  ...
  "devDependencies": {
    ...
    "@types/node": "^14.0.27"
  }
}

-D-flaggen sørger for at typene går i devDependencies-seksjonen i package.json-filen i stedet for dependencies-seksjonen. Dette fordi denne pakken kun er nødvendig under utvikling, ikke i produksjon. Ikke bruk --save-flagget som nevnt i andre svar, fordi det legger typenavhengigheten i dependencies-seksjonen i package.json og fyller serverinstallasjonen med unødvendige filer.

Det er det!

Relaterte artikler