提问者:小点点

TypeScript获取错误TS2304:找不到名称“Required”


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

当我尝试传输一个简单的TypeScript node.js页面时,我收到错误“TS2304:无法找到名称'require'”。我已经阅读了其他几次发生在Stack ;溢出上的此错误,我认为我没有类似的问题。我正在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.ts文件的内容为:

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

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

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

生成的.js文件似乎运行良好,因此我可以忽略该错误。但如果知道为什么会出现这个错误,以及我做错了什么,我会很感激。


共2个答案

匿名用户

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

declare var require: any

如果您使用的是TypeScript2.x,则不再需要安装类型或绝对类型。只需安装以下软件包。

npm install @types/node --save-dev

申报档案的未来(6/15/2016)

类型化和tsd等工具将继续有效,我们将与这些社区一起工作,以确保平稳过渡。

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

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

确保是src文件夹中的文件,而不是根应用程序文件夹中的文件。

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

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

安装类型

npm install typings -g --save-dev

从DefinitelyType的repo安装requireJS类型定义

typings install dt~node --save --global

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

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

CompilerOptions下使用以下内容更新tsconfig.json:

"types": [
      "webpack-env"
    ]

这允许您执行require.insure和其他Webpack特定的函数。

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

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

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

匿名用户

对于Typescript2.x,现在有两个步骤:

>

  • 安装定义require的包。例如:

    npm install @types/node --save-dev
    

    告诉TypeScript将其全局包含在tsconfig.json中:

    {
        "compilerOptions": {
            "types": ["node"]
        }
    }
    

    第二步只有在需要访问全局可用函数(如require)时才是重要的。对于大多数包,您应该只使用import package from'package'模式。不需要在上面的tsconfig.json类型数组中包含每个包。