TypeScript出现错误TS2304:无法找到名称'require'。

24 浏览
0 Comments

TypeScript出现错误TS2304:无法找到名称'require'。

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

当我尝试转换一个简单的TypeScript Node.js页面时,我遇到错误“TS2304:找不到名称”require“”。我已经阅读了Stack Overflow上的几个类似错误的例子,但我认为我没有相似的问题。

我在shell提示符下运行以下命令:

tsc movie.server.model.ts.

这个文件的内容是:

'use strict';
/// 
/*    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文件的内容为:</ p>

/// 
/// 

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

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

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

对于TypeScript 2.x,现在必须要完成两个步骤:

  1. 安装一个定义了require的包。例如:

    npm install @types/node --save-dev
    

  2. 告诉TypeScript在tsconfig.json中全局包含它:

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

第二个步骤只有在你需要访问全局可用的函数,如require时才重要。对于大多数包,你只需使用import package from 'package'的模式。没有必要将每个包都加入tsconfig.json类型数组中。

0
0 Comments

快速而简单

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

declare var require: any

TypeScript 2.x

如果您使用TypeScript 2.x,您不再需要安装Typings或Definitely Typed。只需安装以下软件包即可。

npm install @types/node --save-dev

声明文件的未来(2016年6月15日)

类似Typings和tsd这样的工具将继续工作,我们将与这些社区合作,以确保平稳的过渡。

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

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

请确保该文件在src文件夹中而不是在根应用程序文件夹中。

默认情况下,除非指定了以下任一选项,否则在@types下的任何软件包都已包含在您的构建中。 阅读更多

TypeScript 1.x

使用typings(DefinitelyTyped的替代品)可以直接从GitHub存储库指定定义。

安装typings

npm install typings -g --save-dev

从DefinitelyType的存储库安装requireJS类型定义

typings install dt~node --save --global

Webpack

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

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

compilerOptions下更新tsconfig.json,包括以下内容:

"types": [
      "webpack-env"
    ]

这允许您使用require.ensure和其他Webpack特定的功能。

Angular CLI

使用CLI,您可以遵循上面的Webpack步骤,并将"types"块添加到您的tsconfig.app.json中。

或者,您可以使用预安装的node类型。请记住,这将在您的客户端代码中包含其他不真正可用的类型。

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

0