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

TypeScript error in Angular2 code: Cannot find name 'module'

我定义了以下 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 错误?

更新

如果您使用 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"
}

尝试使用 Typings 1.0

"global" 而不是 "ambient"
typings install dt~node --global --save

两个关键点:

  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" />

    • tsconfig.json

      files 部分添加 typings/index.d.ts
      {
          "files": [
              "typings/index.d.ts"
          ]
      }
      

查看更多here.

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

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

我很难找到第 2 步的说明。

参考:Typescript issue 9184

编辑:

你也可以这样做:

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

例如:

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

[第二次编辑] Apparently,使用最新的打字稿,如果 tsconfig.json 不在项目的根目录中或者您的类型未存储在 [=23= 中,则只需要 typeRootstypes ].

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

  1. 添加来自 angular.io 网站的 typings.json 文件(目前为 2.0.0 最终版本)和 运行:

    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我有如下配置

    {
    "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"
    ]
    }
    

我必须将类型添加为空数组

  1. 检查重复项,如果 moduleId: module.id 仍然突出显示

p.s。对我个人来说这是一个奇怪的问题,因为一旦你排除了 typings.json 中的输入,你就立即突出显示了 'module',但是如果你让它进入,你就会有很多重复。不知道该怪谁,我,打字稿或 visual studio :)

这就是我在 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-dev

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

看来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!';
}

删除所有事件解决了我的错误。

module.id

找不到名称模块。

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

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

npm i @types/node --save

第二步:修改src/app

下的文件tsconfig.app.json
"types": [
    "node"
]

对我来说,我有一个 tsconfig.app.json 扩展 tsconfig.json。所以当我在 tsconfig.json 中添加 "types": ["node"] 时,它被 tsconfig.app.json 中的 "types" 属性 覆盖了。将 "node" 添加到 tsconfig.app.config 中现有的 "types" 属性 修复了它。

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

declare var module: NodeModule;
interface NodeModule
{
id: string;
}

@Component({module.id})