我试图让我的第一个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')行上抛出错误。

typings/tsd.d. d的内容。Ts文件是:

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

.d。Ts文件引用被放置在适当的文件夹中,并添加到typings/tsd.d。通过命令:

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

生成的.js文件似乎工作正常,所以我可以忽略这个错误。但我想知道为什么这个错误发生,我做错了什么。


当前回答

我发现解决方案是使用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[];
}

其他回答

如果你正在使用Yarn v3,看到这个错误(不能找到name require)或其他节点相关的“不能找到”错误在VSCode中,确保你已经安装了Yarn的VSCode sdk插件,并选择了Typescript的工作空间版本。

安装sdk:

yarn dlx @yarnpkg/sdks

设置Typescript版本:

选择一个Typescript文件 按Command + Shift + P 类型Typescript:选择“Typescript版本”

选择“使用工作区版本”

详情见https://yarnpkg.com/getting-started/editor-sdks#vscode。

由于批准的答案没有提到实际创建自己的类型文件的可能性,并将其导入,让我在下面添加它。

假设你使用npm作为包管理器,你可以:

npm i @types/node --save-dev

然后在你的tsconfig文件中:

tsconfig.json

"include": ["typings.d.ts"],

然后创建你的类型文件:

typings.d.ts

import 'node/globals'

完成,错误消失,享受TypeScript:)

这个答案涉及到现代设置(TypeScript 2。Webpack > 2.x)

你不需要安装@types/node(这是所有node .js类型,与前端代码无关,实际上会使setTimout不同的返回值等事情复杂化。

你需要安装@types/webpack-env

npm i -D @types/webpack-env

它给出了Webpack拥有的运行时签名(包括require, require。保证等)

还要确保您的tsconfig。Json文件没有设置“类型”数组->,这将使它在你的node_modules/@types文件夹中拾取所有类型定义。

如果想限制类型的搜索,可以将typeRoot属性设置为node_modules/@types。

而不是:

'use strict';

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

试一试:

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

'use strict';

即先参考路径。

我也一直在为这个问题而挣扎。我相信这适用于所有的发布候选人,也就是rc,但我没有测试。对于@angular rc。它工作得很好。

在package.json中添加core-js作为npm依赖项 运行类型install core-js——save 删除package.json中出现的所有“es6-shim”。你不再需要它了。

干杯!