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!
