web-dev-qa-db-fra.com

Comment réparer "@ types/node/index.d.ts n'est pas un module"?

J'ai installé les définitions de type de nœud à l'aide de la commande suivante

npm install --save-dev @types/node

Après cela, lorsque j'essaie d'importer les définitions de type de nœud à l'aide de l'instruction suivante

import { Process } from '@types/node';

ou

import { Process } from 'node';

Je reçois l'erreur suivante

[ts] File '<root_path>/node_modules/@types/node/index.d.ts' is not a module.

Je suis sûr qu'il y a quelque chose de très fondamental qui me manque, mais je ne peux pas comprendre. 

Peu plus de choses

  1. J'utilise Windows 8
  2. J'utilise le code Visual Studio

Voici à quoi ressemble mon tsconfig.json

{
  "compilerOptions": {
    "target": "es2015",
    "module": "commonjs",
    "outDir": "lib",
    "typeRoots": [
        "node_modules/@typings"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}

Et voici à quoi ressemble mon webpackconfig.js

var path = require('path');

module.exports = {  
  entry: './ts/handler.ts',
  target: 'node',
  module: {
    loaders: [
      { test: /\.ts(x?)$/, loader: 'ts-loader' },      
      { test: /\.json$/, loader: 'json-loader' }
    ]
  },
  resolve: {
    extensions: ['.ts', '.js', '.tsx', '.jsx']
  },
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: 'handler.js'
  },
};
8
Suhas

À la place d'utiliser:

import { Process } from '@types/node';

Vous devez changer votre tsconfig.json:

{
  "compilerOptions": {
    ...
    "typeRoots": ["node_modules/@types"]
  }
}

Après cela, la variable de processus devient disponible en tant que globale.

Parfois, vous devrez importer depuis un module Node.js, comme par exemple le module fs. Tu peux faire:

import * as fs from "fs";

Vous n'avez pas besoin d'importer fs depuis "noeud" ou depuis "@ types/noeud".

Vous pouvez en apprendre plus ici .

2
Remo H. Jansen

C'est parce qu'à l'intérieur du fichier de typage de nœud, tout module a été déclaré avec le nom node.

Si tu utilises 

import { Process } from 'node';

TypeScript essaiera également de trouver un module de noms node ou un espace de noms node

Ici vous pouvez charger le fichier complet en utilisant 

import 'node';

Dans votre cas, vous souhaitez obtenir uniquement le processus de l'espace de noms NodeJS:

import 'NodeJS';

Après cela, il vous suffit de l'appeler comme suit: 

class toto implements NodeJS.Process{

}

MODIFIER : 

Si vous utilisez TypeScript> = 2.0, vous n’auriez pas besoin d’ajouter une importation dans votre fichier, mais seulement si vous voulez "optimiser l’importation"

2
OrcusZ