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