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


当前回答

Electron + Angular 2/4加法:

除了将“node”类型添加到ts.config各种文件之外,最终对我有用的是将“node”类型添加到 typings.d.ts文件:

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

注意,我的案例是用Electron + Angular 2/4开发的。我需要window全局的require。

其他回答

又快又脏

如果你只有一个使用require的文件,或者你这样做是为了演示,你可以在TypeScript文件的顶部定义require。

declare var require: any

打印稿2.倍

如果你使用的是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文件夹中的文件,而不是根app文件夹中的文件。

默认情况下,@types下的任何包都已经包含在构建中,除非您指定了这些选项中的任何一个。阅读更多

打印稿1.倍

使用类型(DefinitelyTyped的替换),您可以直接从GitHub存储库指定定义。

readme typings

npm install typings -g --save-dev

从DefinitelyType的repo中安装requireJS类型定义

typings install dt~node --save --global

Webpack

如果你使用Webpack作为构建工具,你可以包含Webpack类型。

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

更新您的tsconfig。在compilerOptions下使用以下命令:

"types": [
      "webpack-env"
    ]

这允许您进行require操作。确保和其他Webpack特定的功能。

角CLI

使用CLI,你可以按照上面的Webpack步骤,将“types”块添加到tsconfig.app.json中。

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

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }

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

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

npm i @types/node --save-dev

然后在你的tsconfig文件中:

tsconfig.json

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

然后创建你的类型文件:

typings.d.ts

import 'node/globals'

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

我还有另一个答案,建立在之前所有描述npm install @types/node并在tsconfig中包含node的答案之上。json / compilerOptions / types。

在我的例子中,我有一个基本的tsConfig。json和Angular应用程序中一个单独的扩展json:

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

我的问题是这个tsconf .app.json中的空类型-它破坏了基本配置中的一个。

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

我在tsconfig.json中有这个:

    "types": [
      "node"
    ]

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

    "types": []

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

而不是:

'use strict';

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

试一试:

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

'use strict';

即先参考路径。