ошибка при получении машинописного текста TS2304: не удается найти имя 'require'

Проблема с корнем заключается в том, что вам нужно преобразовать массив в список, верно? Вы можете сделать это, используя определенный тип (TimePeriod вместо T) и следующий код.

Поэтому используйте что-то вроде этого:

List<TimePeriod> list = new ArrayList<TimePeriod>();
list.addAll(Arrays.asList(sizes));

Теперь вы можете передать список в любой метод, который хочет список.

377
задан cgatian 20 May 2017 в 12:43
поделиться

21 ответ

Quick and Dirty

Если у вас есть только один файл, использующий require, или вы делаете это для демонстрационных целей, вы можете определить require в верхней части вашего файла TypeScript.

declare var require: any

TypeScript 2.x

Если вы используете TypeScript 2.x, вам больше не нужно устанавливать типизированные или однозначно набранные. Просто установите следующий пакет.

npm install @types/node --save-dev

Файлы будущего декларации (15.06.2016)

Такие инструменты, как Typings и TSD, будут продолжать работать, и мы будем работать вместе эти общины, чтобы обеспечить плавный переход.

ДОПОЛНИТЕЛЬНО: Если вы указываете typeroots или types в своем tsconfig.json. Возможно, вам придется обновить tsconfig.json, чтобы включить узел в качестве типа. По умолчанию любой пакет в @types уже включен в вашу сборку , если вы не указали ни одну из этих опций. Подробнее

Ниже приведена правильная конфигурация для каждого из этих параметров.

{
    "compilerOptions": {
        // types option has been previously configured
         "types": [
            // add node as an option
            "node"
         ],
         // typeRoots option has been previously configured
         "typeRoots": [
            // add path to @types
            "node_modules/@types"
         ]
    }
}

TypeScript 1.x

Используя наборы (замена DefiniteTyped), вы можете указать определение непосредственно из репозитория GitHub.

Установить наборы

npm install typings -g --save-dev

Установить определение типа requireJS из репозитория DefintelyType

typings install dt~node --save --global

Webpack

Если вы используете Webpack в качестве инструмента сборки, вы можете включить типы веб-пакетов.

npm install --save-dev @ types / webpack-env

Обновите свой tsconfig.json следующим образом в compilerOptions:

"types": [
      "webpack-env"
    ]

Это позволяет вам сделать require.ensure и другие специальные функции Webpack.

Angular CLI

С помощью CLI вы можете выполнить вышеуказанный шаг Webpack и добавить блок «types» в свой tsconfig.app.json.

В качестве альтернативы, вы можете использовать предустановленные node типы. Имейте в виду, что в ваш клиентский код будут включены дополнительные типы, которые на самом деле недоступны.

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }
615
ответ дан Stephen Turner 20 May 2017 в 12:43
поделиться

Если вы столкнулись с этой проблемой в файле ts, в котором есть только некоторые постоянные значения, вы можете просто

переименовать файл .ts в файл .js

и ошибка больше не возникнет.

-2
ответ дан Aavgeen singh 20 May 2017 в 12:43
поделиться

импорт * как мангуст из «мангуста»

2
ответ дан basquith16 20 May 2017 в 12:43
поделиться

У меня есть еще один ответ, который основывается на всех предыдущих, которые описывают npm install @types/node и в том числе node в tsconfig.json / compilerOptions / types.

В моем случае у меня есть база tsConfig.json и отдельная в приложении Angular, расширяющая эту:

{
"extends": "../../tsconfig.json",
"compilerOptions": {
   "outDir": "../out-tsc/app",
   "types": []
 },

Моя проблема была пустой types в этом tsconfi.app.json - это забивает тот, что в базовой конфигурации.

1
ответ дан HankCa 20 May 2017 в 12:43
поделиться

Я не мог заставить ошибку 'require' уйти, используя любой из вышеперечисленных приемов.

но я обнаружил, что проблема заключалась в том, что мои инструменты машинописи для Visual Studio, где старая версия (1.8.6.0) и последняя версия на сегодняшний день (2.0.6.0)

Вы можете скачать последняя версия инструментов:

https://www.microsoft.com/en-us/download/details.aspx?id=48593

1
ответ дан Thomas 20 May 2017 в 12:43
поделиться

Электрон + угловое добавление 2/4. Помимо добавления типа 'node' к различным файлам ts.config, в конечном итоге мне удалось добавить следующее к файлу typings.d.ts:

declare var window: Window;
interface Window {
  process: any;
  require: any;
}

Обратите внимание, что мой случай развивается с электронным + угловым 2/4. Мне нужно было запросить глобальное окно.

2
ответ дан mihaa123 20 May 2017 в 12:43
поделиться

Убедитесь, что вы установили npm i @types/node

2
ответ дан Rupesh Kumar Tiwari 20 May 2017 в 12:43
поделиться

Просто для справки, я использую Angular 7.1.4 , машинописный текст 3.1.6 , и единственное, что мне нужно сделать, это добавить эту строку в tsconfig.json

    "types": ["node"], // within compilerOptions

Надеюсь, это поможет.

6
ответ дан Hearen 20 May 2017 в 12:43
поделиться

Вместо:

'use strict';

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

Попробуйте:

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

'use strict';

, т.е. первый путь ссылки.

9
ответ дан Brendan Green 20 May 2017 в 12:43
поделиться

Этот ответ относится к современным настройкам (машинописный текст 2.x, веб-пакет> 2.x)

вам НЕ нужно устанавливать @ types / node (который является узлом .js вводит и не имеет отношения к внешнему коду, фактически усложняя такие вещи, как setTimout, различное возвращаемое значение и т. д.

вам НЕОБХОДИМО установить @ types / webpack-env

npm i -D @types/webpack-env

, который выдает сигнатуры времени выполнения, которые есть у веб-пакета (включая require и require.ensure и т. Д.)

также убедитесь, что ваш tsconfig.json не имеет установленного массива 'types' ->, который будет сделайте так, чтобы он принимал все определения типов в вашей папке node_modules / @ types. Если вы хотите ограничить поиск типов, вы можете установить для свойства typeRoot значение node_modules / @ types

9
ответ дан Nadav SInai 20 May 2017 в 12:43
поделиться

Иногда может отсутствовать «jasmine» из tsconfig.json, что может привести к этой ошибке. (Typescript 2.X)

, поэтому добавьте

"types": [
  "node",
  "jasmine"
]

в свой файл tsconfig.json

2
ответ дан Samintha Kaveesh 20 May 2017 в 12:43
поделиться

Я обнаружил, что решение состояло в том, чтобы использовать команду TSD:

tsd install node --save

, которая добавляет / обновляет файл typings/tsd.d.ts, и этот файл содержит все определения типов, которые требуются для приложения узла.

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

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

Потребность определяется следующим образом по состоянию на январь 2016 года:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}
7
ответ дан rmlarsen 20 May 2017 в 12:43
поделиться

Вы можете

declare var require: any

Или, для более всесторонней поддержки, использовать DefinitiveTyped's require.d.ts

Также, вместо var mongoose = require('mongoose'), вы можете попробуйте следующее

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
67
ответ дан ᆼᆺᆼ 20 May 2017 в 12:43
поделиться

Добавить следующее в tsconfig.json:

"typeRoots": [ "../node_modules/@types" ]
1
ответ дан Styx 20 May 2017 в 12:43
поделиться

Если вы можете скомпилировать код, но Visual Studio 2015 помечает функции 'require' как ошибки с текстом ошибки не может найти имя 'require' или не может найти символ 'require' обновляет TypeScript для Visual Studio 2015 до последней версии (на данный момент 2.1.5) и обновите ReSharper (если вы его используете) как минимум до версии 2016.3.2.

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

1
ответ дан Mike Eshva 20 May 2017 в 12:43
поделиться

Просто в дополнение к ответу cgatian, для TypeScript 1.x

Если вы все еще видите ошибки, пожалуйста, конкретно укажите index.d.ts в опциях вашего компилятора.

"files": [
    "typings/index.d.ts"
]
1
ответ дан Vidish Datta 20 May 2017 в 12:43
поделиться
  1. Вы указали, какой модуль использовать для переноса кода?
    tsc --target es5 --module commonjs script.ts
    Вы должны сделать это, чтобы транспортер знал, что вы компилируете Код NodeJS. Документы .

  2. Вы также должны установить определения мангуста
    tsd install mongoose --save

  3. Не используйте var для объявления переменных (если не требуется, что является очень редкий случай), используйте вместо этого let. Узнайте больше об этом

1
ответ дан Ayman Nedjmeddine 20 May 2017 в 12:43
поделиться
1111 Я тоже боролся с этой проблемой. Я считаю, что это работает для всех кандидатов на выпуск aka rc , но я не проверял, хотя. Для @angular rc.2 это работает хорошо.

  1. Добавьте core-js как зависимость npm в package.json
  2. , запустите typings install core-js --save
  3. , удалите все "es6-shim" вхождения в вашем package.json. Вам это больше не нужно.

Ура!

2
ответ дан kucherenkovova 20 May 2017 в 12:43
поделиться

Для 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 выше.

84
ответ дан Jordan 20 May 2017 в 12:43
поделиться

Я взял ответ Питера Варги , чтобы добавить declare var require: any;, и превратил его в универсальное решение, которое работает для всех файлов .ts в общем, используя preprocess-loader :

  1. установить загрузчик препроцессора:

    npm install preprocessor-loader
    
  2. добавить загрузчик в ваш webpack.config.js (я использую TS-загрузчик для обработки источников TypeScript):

    module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }
  1. Добавьте конфигурацию, которая добавит обходной путь для каждого источника:
{
    "line": false,
    "file": true,
    "callbacks": [{
        "fileName": "all",
        "scope": "source",
        "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
    }]
}

Вы можете добавить более надежный require.d.ts таким же образом, но declare var require: any; было достаточно в моей ситуации.

Обратите внимание, есть ошибка в препроцессоре 1.0.5 , которая обрезает последнюю строку, поэтому просто убедитесь, что у вас есть дополнительный пробел в конце, и все будет в порядке.

5
ответ дан Community 20 May 2017 в 12:43
поделиться

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

Так, у меня было это в tsconfig.json:

    "types": [
      "node"
    ]

И этот в src/tsconfig.app.json:

    "types": []

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

1
ответ дан 22 November 2019 в 23:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: