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

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

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

tsc movie.server.model.ts.

该文件的内容是: webpack

'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')行上引起。 git

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

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

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

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

产生的.js文件彷佛工做正常,所以我能够忽略该错误。 可是,我很高兴知道为何会发生此错误以及我在作什么错。 typescript


#1楼

您能够 shell

declare var require: any

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

另外,您能够尝试如下方法,而不是var mongoose = require('mongoose') json

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

#2楼

代替:

'use strict';

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

尝试:

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

'use strict';

即先参考路径。


#3楼

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

#4楼

我接受了彼得·瓦尔加(Peter Varga)的回答 ,添加了declare var require: any; 并经过使用preprocess-loader将其制做为适用于全部.ts文件的通用解决方案:

  1. 安装预处理程序加载器:

    npm install preprocessor-loader
  2. 将加载程序添加到您的webpack.config.js中 (我正在使用ts-loader处理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楼

又快又脏

若是您只有一个文件使用require,或者出于演示目的而执行此操做,则能够在TypeScript文件的顶部定义require。

declare var require: any

TypeScript 2.x

若是您使用的是TypeScript 2.x,则再也不须要安装Typings或Definitely Typed。 只需安装如下软件包。

npm install @types/node --save-dev

声明文件的将来(6/15/2016)

诸如Typings和tsd之类的工具将继续起做用,咱们将与这些社区一块儿工做,以确保顺利过渡。

验证或编辑您的src /tsconfig.app.json,使其包含如下内容:

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

确保该文件位于src文件夹中,而没有一个位于根应用程序文件夹中。

默认状况下, 除非您指定了这些选项中的任何一个, 不然 @types下的任何软件包都已包含在您的版本中。 阅读更多

TypeScript 1.x

使用类型(DefinitelyTyped的替代),您能够直接从GitHub存储库中指定定义。

安装打字

npm install typings -g --save-dev

从DefinitelyType的仓库中安装requireJS类型定义

typings install dt~node --save --global

Webpack

若是将Webpack用做构建工具,则能够包括Webpack类型。

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

更新您的tsconfig.json用在如下compilerOptions

"types": [
      "webpack-env"
    ]

这使您能够执行require.ensure和其余Webpack特定功能。

角度CLI

使用CLI,您能够按照上面的Webpack步骤进行操做,并将“类型”块添加到tsconfig.app.json

或者,您可使用预安装的node类型。 请记住,这将包括客户端代码中实际上不可用的其余类型。

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }
相关文章
相关标签/搜索