nodejs требуют внутри файла машинопись

голоса
60

Мне интересно , как загрузить регулярный модуль nodejs из node_modulesкаталога из внутри TypeScriptкласса.

Когда я пытаюсь скомпилировать .tsфайл , который содержит:

var sampleModule = require('modulename');

компилятор говорит мне, что я не могу использовать требовать в этой области. (Эта линия находится в начале файла).

Есть ли способ , как загружать и использовать модули из node_modulesвнутри TypeScriptкласса?

Задан 05/10/2012 в 09:05
источник пользователем
На других языках...                            


4 ответов

голоса
77

Машинопись всегда будет жаловаться , когда он не может найти символ. Компилятор поставляется вместе с набором определений по умолчанию для window, documentи такого , указанного в файле lib.d.ts. Если я делаю вычленить информацию requireв этом файле я не могу найти определение функции require. Следовательно, мы должны сказать компилятору себя , что эта функция будет существовать во время выполнения , используя declareсинтаксис:

declare function require(name:string);
var sampleModule = require('modulename');

В моей системе, это компилируется нормально.

Ответил 05/10/2012 в 09:26
источник пользователем

голоса
30

Правильный синтаксис:

import sampleModule = require('modulename');

или

import * as sampleModule from 'modulename';

Затем скомпилировать машинопись с --module commonjs.

Если пакет не приходит с index.d.tsфайлом , и это package.jsonне имеет "typings"свойства, tscбудет лаять , что он не знает , что 'modulename'относится. Для этого вам необходимо найти .d.tsфайл для него на http://definitelytyped.org/ , или написать его самостоятельно.

Если вы пишете код для Node.js вы также хотите , node.d.tsфайл с http://definitelytyped.org/ .

Ответил 03/02/2016 в 07:47
источник пользователем

голоса
16

Лучшее решение, чтобы получить копию определения типа узла. Это позволит решить все виды проблем с зависимостями, не только require(). Это было сделано ранее с использованием пакетов , таких как typings, но , как упоминалось Майк Чемберлен, типизации являются устаревшими. Современный способ делает это так:

npm install --save-dev @types/node

Мало того, что это исправить ошибку компилятора, он будет также добавить определение узла API для вашего IDE.

Ответил 18/10/2017 в 21:20
источник пользователем

голоса
4

Используйте типизации для доступа к функциям узла из Машинописи:

typings install env~node --global

Если у вас нет типизации установить его:

npm install typings --global
Ответил 29/12/2016 в 09:42
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more