Как исправить " @types/node / index.d.ts не является модулем"?
Я установил определения типов узлов, используя следующую команду
npm install --save-dev @types/node
после этого, когда я пытаюсь импортировать определения типа узла, используя следующую инструкцию
import { Process } from '@types/node';
или
import { Process } from 'node';
Я получаю следующую ошибку
[ts] File '<root_path>/node_modules/@types/node/index.d.ts' is not a module.
Я уверен, что есть что-то очень основное, чего мне не хватает здесь, но я не могу понять.
несколько вещей
- я использую Windows 8
- я использование кода Visual Studio
вот как мой tsconfig.json
выглядит
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"outDir": "lib",
"typeRoots": [
"node_modules/@typings"
]
},
"exclude": [
"node_modules"
]
}
а вот как мой 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'
},
};
2 ответов
вместо:
import { Process } from '@types/node';
вам нужно изменить свой tsconfig.json
:
{
"compilerOptions": {
...
"typeRoots": ["node_modules/@types"]
}
}
после этого переменная процесса становится доступной как глобальная.
иногда вам нужно будет импортировать из узла.модуль js, например,fs
модуль. Вы можете сделать:
import * as fs from "fs";
вам не нужно импортировать fs
из " node "или из"@types/node".
вы можете узнать больше здесь.
это потому, что внутри файла ввода узла любой модуль объявил с именем узел.
если вы используете
import { Process } from 'node';
TypeScript тоже попытается найти модуль или узел пространства имен
здесь вы можете загрузить полный файл с помощью
import 'node';
в вашем случае вы хотите получить только процесс из пространства имен NodeJS:
import 'NodeJS';
после этого вам просто нужно назвать это так :
class toto implements NodeJS.Process{
}
EDIT:
если вы используете TypeScript > = 2.0, вам не нужно добавлять импорт в файл, только если вы хотите "оптимизировать импорт"