TypeScript出现错误TS2304:找不到名称“ require”

我正在尝试启动并运行我的第一个TypeScript和DefinitelyTyped Node.js应用程序,并且遇到一些错误。

当我尝试转换简单的TypeScript Node.js页面时,出现错误“ TS2304:找不到名称'require'”。我已经阅读了Stack Overflow上此错误的其他几种情况,但我认为我没有类似的问题。我在shell提示符下运行命令:

tsc movie.server.model.ts.

该文件的内容是:

'use strict';

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

/*    movie.server.model.ts - definition of movie schema */

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

var foo = 'test';

错误被抛出var mongoose=require('mongoose')行。

Types / tsd.d.ts文件的内容是:

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

.d.ts文件引用放置在适当的文件夹中,并通过以下命令添加到Types / tsd.d.ts中:

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

产生的.js文件似乎可以正常工作,因此我可以忽略该错误。但是,我很高兴知道为什么会发生此错误以及我在做什么错。

理查德十三2020/03/17 16:54:59

如果您在.ts文件中遇到此问题,而该文件只是为您提供一些常量值,那么您可以

将您的.ts文件重命名为.js文件

而且错误不会再出现。

小哥猿2020/03/17 16:54:59

我有另一个答案是建立在以前的不同,描述npm install @types/node和包括nodetsconfig.json / compilerOptions / types

就我而言,我tsConfig.json在Angular应用程序中有一个基础和一个单独的基础,用于扩展此基础:

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

我的问题是空types在这tsconfi.app.json-它则会覆盖了一个在基本配置。

Harry蛋蛋Eva2020/03/17 16:54:59

在中添加以下内容tsconfig.json

"typeRoots": [ "../node_modules/@types" ]
西里西里2020/03/17 16:54:59

如果您可以编译代码,但Visual Studio 2015将“需要”功能标记为带有错误文本的错误,则找不到名称“需要”无法解析符号“需要”,请将TypeScript for Visual Studio 2015更新到最新版本(当前为2.1)。 5)并将ReSharper(如果使用的话)更新到至少2016.3.2版。

我有一个烦人的问题,有一段时间无法找到解决方案,但是我终于以这种方式解决了。

Stafan小宇宙2020/03/17 16:54:59

通过使用以上任何技巧,我都无法摆脱“需要”错误。

但是我发现问题出在我的Visual Studio TypeScript工具上,其中旧版本(1.8.6.0)和最新版本是(2.0.6.0)。

您可以从以下位置下载工具的最新版本:

适用于Visual Studio 2015的TypeScript

神无宝儿2020/03/17 16:54:58

除了cgatian的答案外,对于TypeScript 1.x

如果仍然看到错误,请在编译器选项中专门提供index.d.ts。

"files": [
    "typings/index.d.ts"
]
十三飞云2020/03/17 16:54:58
  1. 您是否指定了用于转码的模块?
    tsc --target es5 --module commonjs script.ts
    您必须执行此操作以使编译器知道您正在编译NodeJS代码。文件

  2. 您还必须安装猫鼬定义
    tsd install mongoose --save

  3. 不要使用var声明变量(除非有必要,这是一种非常罕见的情况),请let改用。 进一步了解

米亚猴子2020/03/17 16:54:58

电子 +角2/4加法:

除了向ts.config中添加各种文件的“节点”类型之外,最终对我有用的是在typings.d.ts文件中添加下一个

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

请注意,我的案例是使用Electron + Angular 2/4开发的。我需要全局窗口上的需求。

乐神乐前端2020/03/17 16:54:58

有时从tsconfig.json中丢失“茉莉花”可能会导致此错误。(TypeScript 2.X)

所以加

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

到您的tsconfig.json文件。

小卤蛋卡卡西2020/03/17 16:54:58

从“猫鼬”进口*作为猫鼬

Near达蒙2020/03/17 16:54:58

确保已安装 npm i @types/node

AMandy前端2020/03/17 16:54:58

我也一直在努力解决这个问题。我相信这适用于所有发行候选版本 aka rc,但是我没有测试过。对于@angular rc.2,它可以很好地工作。

  1. 添加core-js为npm依赖项package.json
  2. typings install core-js --save
  3. 删除"es6-shim"所有的事件package.json您不再需要它。

干杯!

宝儿DavaidL2020/03/17 16:54:58

在我的情况下,这是一个超级愚蠢的问题,其中src/tsconfig.app.jsontsconfig.json设置被覆盖

所以,我在tsconfig.json

    "types": [
      "node"
    ]

而这个在src/tsconfig.app.json

    "types": []

我希望有人觉得这有帮助,因为此错误使我发白。

樱阳光Pro2020/03/17 16:54:58

我发现解决方案是使用TSD命令:

tsd install node --save

它将添加/更新typings/tsd.d.ts文件,并且该文件包含节点应用程序所需的所有类型定义。

在文件的顶部,我引用了tsd.d.ts以下内容:

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

从2016年1月起,需求定义如下:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}
卡卡西小卤蛋GO2020/03/17 16:54:58

仅供参考,我使用的是Angular 7.1.4TypeScript 3.1.6,我唯一需要做的就是在此行中添加tsconfig.json

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