Angular2代码中的TypeScript错误:找不到名称'module'

时间:2016-04-18 17:35:26

标签: typescript angular commonjs

我定义了以下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变量(参见here)。我在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错误?

11 个答案:

答案 0 :(得分:92)

更新

如果您使用 Typescript 2 ^ ,只需使用以下命令:

npm i @types/node --save-dev

(而不是--save-dev,您可以使用快捷方式-D

或全球安装:

npm i @types/node --global

如果需要,您还可以在tsconfig.json中指定typeRootstypes,但 by default all visible “@types” packages are included in your compilation

旧版

您需要安装node ambientDependencies。 Typings.json

"ambientDependencies": {
    "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#138ad74b9e8e6c08af7633964962835add4c91e2",

另一种方法可以使用typings管理器全局安装节点定义文件:

typings install dt~node --global --save-dev

然后你的typings.json文件将如下所示:

"globalDependencies": {
  "node": "registry:dt/node#6.0.0+20160608110640"
}

答案 1 :(得分:44)

对于那些希望使用Typescript 2.x和@types执行此操作的人,您需要执行以下操作:

  1. npm install -D @types/node
  2. types: ["node"]文件的compilerOptions下添加tsconfig.json
  3. 我很难找到第2步的说明。

    参考:Typescript issue 9184

    修改

    你也可以这样做:

    1. "typeRoots": [ "node_modules/@types" ]文件的compilerOptions下添加tsconfig.json。这不是types属性,而是自动包含您使用npm安装的任何@types的好处。
    2. 例如:

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

      [第二次修改] Apparently,使用最新的打字稿,如果typeRoots不在项目的根目录中,或者您的类型未存储在{{1}中,则只需要typestsconfig.json }。

答案 2 :(得分:11)

而不是“环境”尝试通过Typings 1.0

的“全局”
typings install dt~node --global --save

答案 3 :(得分:9)

将@ angular / angular2 Quickstart项目移植到新的角度cli自动生成项目时,我遇到了这个错误。

似乎不再需要<?php foreach ($servers as $server): ?> <?php if($server['type']=="good"){?> <tr> <td style="width:340px;">&nbsp;<?php echo $server['name']; ?></td> <td style="width:240px;"><?php echo $server['ip']; ?></td> </tr> <?php } ?> <?php endforeach; ?>

这是最新的自动生成组件:

moduleId: module.id

删除所有出现都解决了我的错误。

答案 4 :(得分:3)

两个关键点:

  1. 运行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部分添加tsconfig.json
      {
          "files": [
              "typings/index.d.ts"
          ]
      }
      
  3. 查看更多here

答案 5 :(得分:1)

我使用VS 2015,并遇到同样的问题,但我已经解决了使用:

  1. 从angular.io网站(目前2.0.0决赛)和运行中添加typings.json文件:

    typings install // don't forget to install typings globally
    
  2. 然后

    npm install -D @types/node --save
    
    在package.json中的

    我有

    "devDependencies": {
    "@types/node": "6.0.40",
    ...
    
      在typings.json中
    1. 我有以下配置

      {
      "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"
      ]
      }
      
    2. 我必须将类型添加为空数组

      1. 检查重复项,如果仍然突出显示moduleId:module.id
      2. P.S。对我个人来说这是一个奇怪的问题,因为只要你在typings.json中排除了打字,就会立即突出显示&#39; module&#39;,但是如果你让它进入,你就会有很多重复。不知道应该责怪谁,我,打字稿或视觉工作室:)

答案 6 :(得分:0)

这就是我在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",
    ...
  },

答案 7 :(得分:0)

我安装在项目中,运作良好

npm install @types/node --save

答案 8 :(得分:0)

module.id

找不到名称模块。

请按照以下步骤解决此问题,

第1步:使用以下命令安装节点模块

npm i @types/node --save

步骤2:修改tsconfig.app.json下的文件src/app

"types": [
    "node"
]

答案 9 :(得分:0)

对我来说,我有一个N4*BALE*WHITE~DMG*D8*19630625~N4*PITT*PINKMAN*15108~ 扩展了tsconfig.app.json。因此,当我在tsconfig.json中添加"types": ["node"]时,它被tsconfig.json中的“ types”属性覆盖。在tsconfig.app.json中将“节点”添加到现有的“类型”属性中即可解决该问题。

答案 10 :(得分:0)

直到将其粘贴到组件顶部的module.id之前,它仍然无法正常工作。像这样

  

声明var模块:NodeModule;   
Interface NodeModule接口
{
id:字符串;   
}

     

@Component({module.id})