Nodejs требуется внутри файла TypeScript
Как загрузить обычный модуль NodeJS (из node_modules
) из класса TypeScript
?
Когда я пытаюсь скомпилировать файл .ts
который содержит:
var sampleModule = require('modulename');
Компилятор подсказывает, что я не могу использовать требовать в этой области. (эта строка находится в начале файла).
Ответы
Ответ 1
Typescript всегда будет жаловаться, когда он не сможет найти символ. Компилятор поставляется вместе с набором определений по умолчанию для window
, document
и таких, которые указаны в файле с именем lib.d.ts
. Если я сделаю grep для require
в этом файле, я не найду никакого определения функции require
. Следовательно, мы должны сами сообщить компилятору, что эта функция будет существовать во время выполнения с использованием синтаксиса declare
:
declare function require(name:string);
var sampleModule = require('modulename');
В моей системе это компилируется просто отлично.
Ответ 2
Правильный синтаксис:
import sampleModule = require('modulename');
или же
import * as sampleModule from 'modulename';
Затем скомпилируйте ваш TypeScript с помощью --module commonjs
.
Если пакет не поставляется с файлом index.d.ts
и его package.json
не имеет "typings"
, tsc
будет лаять, что не знает, на что 'modulename'
. Для этого вам нужно найти файл .d.ts
для него на http://definitetyped.org/ или написать его самостоятельно.
Если вы пишете код для Node.js, вам также понадобится файл node.d.ts
с http://definitetyped.org/.
Ответ 3
Лучшее решение - получить копию определений типов узлов. Это решит все виды проблем с зависимостями, а не только require()
. Ранее это делалось с использованием таких пакетов, как typings
, но, как отметил Майк Чемберлен, набор текста не рекомендуется. Современный способ делает это так:
npm install --save-dev @types/node
Он не только исправит ошибку компилятора, но и добавит определения Node API в вашу IDE.
Ответ 4
Используйте типизацию для доступа к функциям node из TypeScript:
typings install env~node --global
Если у вас нет пиктограмм 😲 установите его:
npm install typings --global