Angular2代码中的TypeScript错误:找不到名称“模块”


67

我定义了以下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指的是CommonJSmodule变量(请参阅此处)。我在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错误?


我认为模块不是在编译时提供给您的。
toskv

好吧,这个项目对我来说编译正确。我不知道怎么做!因此,我试图将其隔离在一个更简单的项目中,但该项目在那里无法正常工作。因此,试图弄清楚在第一个项目中它是如何工作的。
Naresh

1
您可以声明module.d.ts内容为的文件declare var module: any;。然后从您的引导程序中引用此文件/// <reference path="path/to/typings/module.d.ts" />
Poul Kruijt

2
在types.json的virtualDependencies中:节点
yurzui

1
@yurzui,你把它钉在头上了!您能否将其写出来作为答案,以便我将其标记为正确?
Naresh

Answers:


99

更新资料

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

npm i @types/node --save-dev

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

或在全球安装:

npm i @types/node --global

如果需要,也可以在tsconfig.json中指定typeRootstypes,但默认情况下,所有可见的“ @types”包都包含在编译中

旧版本

您需要安装节点EnvironmentalDependencies。Typings.json

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

另一种方法可以使用分型管理器安装在全球节点定义文件:

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

然后,您的Types.json文件将如下所示:

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

4
有两点:1.请记住将引用添加到根打字稿文件的顶部,这样:/// <引用路径=“ ../../ typings / main / ambient / node / index.d.ts” /> 2.编辑@yurzui所示的types.json文件对我有用,但最初我只是这样做:> typesings install node --ambient --save哪个更新了Types.json文件[具有不同版本],但没有就像index.d.ts文件在转换时抛出许多错误一样。仅供参考:我正在使用Angular Beta.16
Bonneville

1
@yurzui如何从引导中添加对它的引用?
LEMUEL ADANE

2
命令npm install @types/node --save为我解决了这一问题
塞缪尔·斯拉德

2
npm install @types/node --save对我来说足够了。
Slava Fomin II

2
键入应为devDependencies,因为TypeScript将它们用于类型检查和转译,因此应使用转载进行安装,npm install -D @types/node因为转译代码中未使用它们。
mtpultz

47

对于那些希望使用Typescript 2.x和@types做到这一点的人,这是您需要做的:

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

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

参考:打字稿问题9184

编辑:

您也可以这样做:

  1. 包括"typeRoots": [ "node_modules/@types" ]compilerOptions你的tsconfig.json文件中。它代替了该types属性,并且具有自动包含@types您使用npm安装的所有内容的优点。

例如:

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

[第二次编辑] 显然,使用最新的打字稿,您仅需要typeRootstypes如果tsconfig.json不在项目的根目录中,或者您的类型未存储在中)node_modules/@types


1
@msanford是的,嵌套在里面。我将使答案更明确。
艾萨克(Isaac)

2
非常感谢您的第2步!用这几天猛击我的头。
tomtastico

1
在向我的编译器选项中添加“类型”后:[“节点”]。我所有的spec.ts测试文件失败,找不到名称“期望”,“它”,“描述”,“ foreach”等....
Tyguy7

在tsconfig.json中添加类型:[“ node”]对我不起作用。我必须将其添加到src / tsconfig.app.json中。我从Angular 8升级到9,从TS 3..5升级到3.8,此后也许有所改变。
埃里克·索克

14

将@ angular / angular2快速入门项目移植到新的角度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!';
}

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


谢谢-这是我从Angular 2升级到Angular 5时为我做的一个:-)
karora

11

替代Typings 1.0的“ global”尝试“ global”

typings install dt~node --global --save

4

module.id

找不到名称模块。

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

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

npm i @types/node --save

第2步:修改文件tsconfig.app.jsonsrc/app

"types": [
    "node"
]

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

在这里查看更多。


1

我使用VS 2015,并且遇到了相同的问题,但是使用以下方法已解决:

  1. 从angular.io网站(目前为2.0.0最终版)中添加types.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. 在types.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

ps对我个人而言是一个奇怪的问题,因为一旦您在Types.json中排除类型,就立即突出显示了“模块”,但是如果您放进去,则会有很多重复项。不知道该怪谁,我是打字稿还是视觉工作室:)


1
可以肯定devDependency@types/node就足够了-之后就不需要键入了。IDE可能找不到参考,但这是一个不同的问题。它被简单地通过增加解析/// <reference path="../../../node_modules/@types/node/index.d.ts" />该文件的顶部
Sebas

1

对我来说,我有一个tsconfig.app.json扩展tsconfig.json。因此,当我添加"types": ["node"]tsconfig.json,它被中的“ types”属性覆盖tsconfig.app.json。将“节点”添加到现有的“类型”属性中进行tsconfig.app.config修复。


这就是我的问题-默认角度 tsconfig.app.json定义了一个空白types: [],不仅覆盖了父对象,types而且还导致typeRoots忽略该对象
Worthy7

0

这就是我在Eclipse(Webclipse)/ Windows上为我工作的工作。

第1步:

终奌站

$ npm install @types/node --global --save

第2步:

tsconfig.json

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

此外,我的package.json中具有以下依赖项,因此我使用的是打字稿2。

  "devDependencies": {
    ...
    "typescript": "~2.0.10",
    "@types/node": "^6.0.46",
    ...
  },

0

我安装在项目中,并且运行良好

npm install @types/node --save-dev

1
应该是--save-dev
Ulrich Dohou

0

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

声明var模块:NodeModule;
接口NodeModule
{
id:string;
}

@Component({module.id})

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.