6

TypeScript ошибка TS2304: не удается найти имя 'require'

8

Описание проблемы

Я пытаюсь настроить свое первое приложение на TypeScript и DefinitelyTyped для Node.js, но сталкиваюсь с некоторыми ошибками.

При попытке транскомпилировать простую страницу TypeScript для Node.js я получаю ошибку "TS2304: Cannot find name 'require'". Я прочитал несколько других случаев возникновения этой ошибки на Stack Overflow и не думаю, что у меня схожие проблемы.

Я запускаю команду в терминале:

tsc movie.server.model.ts

Содержимое этого файла следующее:

'use strict';

/// <reference path="typings/tsd.d.ts" />

/*    movie.server.model.ts - определение схемы фильма */

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var foo = 'test';

Ошибка возникает на строке var mongoose = require('mongoose').

Содержимое файла typings/tsd.d.ts таково:

/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />

Ссылки на .d.ts файлы были размещены в соответствующих папках и добавлены в typings/tsd.d.ts с помощью команд:

tsd install node --save
tsd install require --save

Сгенерированный .js файл, кажется, работает нормально, так что я мог бы игнорировать эту ошибку. Но я был бы признателен, если бы кто-то объяснил, почему возникает эта ошибка и что я делаю не так.

5 ответ(ов)

1

Для TypeScript 2.x необходимо выполнить два шага:

  1. Установите пакет, который определяет require. Например:

    npm install @types/node --save-dev
    
  2. Укажите TypeScript, чтобы он включил его глобально в tsconfig.json:

    {
        "compilerOptions": {
            "types": ["node"]
        }
    }
    

Второй шаг важен только если вам нужен доступ к глобально доступным функциям, таким как require. Для большинства пакетов вам следует использовать шаблон import package from 'package'. Нет необходимости включать каждый пакет в массив типов tsconfig.json, указанный выше.

0

В моем случае проблема была супер простой, и это была тупая ошибка, когда файл src/tsconfig.app.json переопределял настройки из tsconfig.json.

У меня в tsconfig.json было следующее:

"types": [
  "node"
]

А в src/tsconfig.app.json было:

"types": []

Надеюсь, эта информация будет полезна кому-то, так как эта ошибка добавила мне немало седых волос.

0

Для справки, я использую Angular 7.1.4 и TypeScript 3.1.6. Для решения вашей проблемы необходимо добавить следующую строку в файл tsconfig.json:

    "types": ["node"] // внутри секции compilerOptions

Это позволит TypeScript правильно распознавать типы Node.js в вашем проекте.

0

Вместо:

'use strict';

/// <reference path="typings/tsd.d.ts" />

Попробуйте:

/// <reference path="typings/tsd.d.ts" />

'use strict';

То есть сначала указывайте путь к справочным данным.

0

Решение проблемы заключается в использовании команды TSD:

tsd install node --save

Эта команда добавляет или обновляет файл typings/tsd.d.ts, в который включаются все определения типов, необходимые для приложения на Node.js.

В начале моего файла я добавил ссылку на tsd.d.ts следующим образом:

/// <reference path="../typings/tsd.d.ts" />

На январь 2016 года определение require выглядит так:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}

Таким образом, вы сможете использовать типы в вашем Node.js приложении корректно.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь