Angular2代码中的TypeScript错误:无法find名称'模块'
我定义了以下的Angular2组件:
import {Component} from 'angular2/core'; @Component({ selector: 'my-app', moduleId: module.id, templateUrl: './app.component.html' }) export class AppComponent { }
当我尝试编译这个,我得到第5行的以下错误:
src/app/app.component.ts(5,13): error TS2304: Cannot find name 'module'.
我相信module.id是指CommonJS module
variables(见这里 )。 我已经在tsconfig.json中指定了CommonJS模块系统:
{ "compilerOptions": { "target": "es5", "module": "commonjs", "declaration": false, "removeComments": true, "noLib": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, "sourceMap": true, "pretty": true, "allowUnreachableCode": false, "allowUnusedLabels": false, "noImplicitAny": true, "noImplicitReturns": true, "noImplicitUseStrict": false, "noFallthroughCasesInSwitch": true }, "exclude": [ "node_modules", "dist", "typings/browser.d.ts", "typings/browser", "src" ], "compileOnSave": false }
我怎样才能纠正TypeScript错误?
更新
如果您使用Typescript 2 ^只需使用以下命令:
npm i @types/node --save-dev
(而不是--save-dev
你可以使用快捷键-D
)
或者全局安装:
npm i @types/node --global
你也可以在你的tsconfig.json中指定typeRoots
或types
,但是默认情况下所有可见的“@types”包都包含在你的编译中 。
旧版
您需要安装节点ambientDependencies。 Typings.json
"ambientDependencies": { "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#138ad74b9e8e6c08af7633964962835add4c91e2",
另一种方式可以使用typings manager来全局安装节点定义文件:
typings install dt~node --global --save-dev
然后你的typings.json文件将如下所示:
"globalDependencies": { "node": "registry:dt/node#6.0.0+20160608110640" }
对于那些希望使用Typescript 2.x和@types来做到这一点的人来说,你需要做的是:
-
npm install -D @types/node
- 在
tsconfig.json
文件的compilerOptions
中包含types: ["node"]
。
我很难find步骤2的说明。
参考: 打字稿9184号
编辑:
你也可以这样做:
- 在你的
tsconfig.json
文件的compilerOptions
下包含"typeRoots": [ "node_modules/@types" ]
。 这是不是types
属性,并有自动包括任何你用npm安装的@types
的好处。
例如:
{ "compilerOptions": { "typeRoots": [ "node_modules/@types" ] } }
[第二编辑] 显然 ,使用最新的打字稿,只需要typeRoots
或types
如果tsconfig.json
不在您的项目的根目录或您的types不存储在node_modules/@types
。
通过types1.0,而不是“环境”尝试“全球”
typings install dt~node --global --save
在将我的@ angular / angular2快速启动项目移植到新的angular度自动生成的项目中时,我遇到了这个错误。
看来, moduleId: module.id
不再需要。
这是最新的自动生成组件:
import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'app works!'; }
删除所有发生的事情解决了我的错误。
两个关键点:
-
注册
typings install dt~node --global --save
运行typings install dt~node --global --save
。 所以你会在typings.json
得到以下部分:"globalDependencies": { "node": "registry:dt/node#6.0.0+20160608110640" }
-
添加对新模块的引用。 两种方式:
-
在TS中直接添加对依赖关系的引用
/// <reference path="../../../typings/globals/node/index.d.ts" />
-
在
typings/index.d.ts
files
部分添加typings/index.d.ts
tsconfig.json
{ "files": [ "typings/index.d.ts" ] }
-
在这里看到更多。
我使用VS 2015,并有相同的问题,但我已经解决使用:
-
从angular.io网站(目前2.0.0 final)添加typings.json文件并运行:
typings install // don't forget to install typings globally
然后
npm install -D @types/node --save
在package.json我有
"devDependencies": { "@types/node": "6.0.40", ...
-
在typings.json我有以下configuration
{ "compilerOptions": { "target": "es5", "module":"commonjs", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "removeComments": true, "noImplicitAny": true, "suppressImplicitAnyIndexErrors": true, "allowSyntheticDefaultImports": true, "types": [] }, "exclude": [ "node_modules", "app-dist" ] }
我不得不将types添加为空数组
- 检查重复项,如果moduleId:module.id仍然高亮显示
对我个人来说,ps是一个奇怪的问题,因为只要你在typings.json中排除types,你立即突出显示“模块”,但是如果你让它进入,你有很多重复的东西。 不知道责怪谁,我,打字稿或视觉工作室:)
这是我在Eclipse(Webclipse)/ Windows上为我工作的。
步骤1:
终奌站
$ npm install @types/node --global --save
第2步:
tsconfig.json
{ "compilerOptions": { ..., "types": ["node"] } }
另外,我在package.json中有以下依赖项,所以我使用的是typescript 2。
"devDependencies": { ... "typescript": "~2.0.10", "@types/node": "^6.0.46", ... },
我安装在项目中,并且运行良好
npm install @types/node --save