我试图让我的第一个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文件似乎工作正常,所以我可以忽略这个错误。但我想知道为什么这个错误发生,我做错了什么。


当前回答

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

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

其他回答

在tsconfig.json中添加如下内容:

"typeRoots": [ "../node_modules/@types" ]

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

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

干杯!

你可以

declare var require: any

或者,要获得更全面的支持,请使用DefinitelyTyped的require.d.ts

同样,不要使用var mongoose = require('mongoose'),你可以试试下面的方法

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')

在我的例子中,这是一个非常愚蠢的问题,src/tsconfig。app。Json覆盖了tsconfig。json设置。

我在tsconfig.json中有这个:

    "types": [
      "node"
    ]

这个在src/tsconfig。app。json中:

    "types": []

我希望有人发现这有帮助,因为这个错误导致我的头发变白了。

如果你可以编译代码,但是Visual Studio 2015将'require'函数标记为错误文本无法找到名称'require'或无法解析符号'require',请将TypeScript for Visual Studio 2015更新到最新版本(目前为2.1.5),并将ReSharper(如果你使用它)更新到至少2016.3.2版本。

这个烦人的问题困扰了我一段时间,一直找不到解决方法,但我最终用这种方法解决了它。