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 modulevariables(见这里 )。 我已经在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中指定typeRootstypes ,但是默认情况下所有可见的“@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来做到这一点的人来说,你需要做的是:

  1. npm install -D @types/node
  2. tsconfig.json文件的compilerOptions中包含types: ["node"]

我很难find步骤2的说明。

参考: 打字稿9184号

编辑:

你也可以这样做:

  1. 在你的tsconfig.json文件的compilerOptions下包含"typeRoots": [ "node_modules/@types" ] 。 这是不是types属性,并有自动包括任何你用npm安装的@types的好处。

例如:

 { "compilerOptions": { "typeRoots": [ "node_modules/@types" ] } } 

[第二编辑] 显然 ,使用最新的打字稿,只需要typeRootstypes如果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!'; } 

删除所有发生的事情解决了我的错误。

两个关键点:

  1. 注册typings install dt~node --global --save运行typings install dt~node --global --save 。 所以你会在typings.json得到以下部分:

     "globalDependencies": { "node": "registry:dt/node#6.0.0+20160608110640" } 
  2. 添加对新模块的引用。 两种方式:

    • 在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,并有相同的问题,但我已经解决使用:

  1. 从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", ... 
  1. 在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添加为空数组

  1. 检查重复项,如果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