找不到名称' PropertyKey'在index.d.ts(MS Visual Studio和角度)

时间:2017-12-31 19:52:58

标签: asp.net-mvc angular typescript

我跟着这个guide使用角度与.net mvc,但我没有成功。我尝试过这些解决方案仍无法解决问题。我在文件中有错误

  

打字稿\ node_modules \ @types \芯-JS \ index.d.ts

Solution

这是tsconfig和package.json,它们都位于项目的根目录中。

  "dependencies": {
    "@angular/animations": "^5.0.0",
    "@angular/common": "^5.0.0",
    "@angular/compiler": "^5.0.0",
    "@angular/core": "^5.0.0",
    "@angular/forms": "^5.0.0",
    "@angular/http": "^5.0.0",
    "@angular/platform-browser": "^5.0.0",
    "@angular/platform-browser-dynamic": "^5.0.0",
    "@angular/router": "^5.0.0",
    "core-js": "^2.4.1",
    "rxjs": "^5.5.2",
    "zone.js": "^0.8.14",
    "typings": "^1.3.2"
  }

tsconfig

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es2017",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "dom",
      "es2017"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}

1 个答案:

答案 0 :(得分:0)

依赖于@types/core-js包。对于通过

明确包含的官方TypeScript声明,它几乎完全是多余的
"lib": ["dom", "es2017"]

使用

"target": "es2017"

同样意味着相同但明确指定--lib正如您所做的那样,这是一种良好的实践。

通过与DOM和ECMAScript API的最新声明重叠,@types/core-js包大致描述了core-js包提供的polyfill的结构,引入了声明冲突的极高可能性。此外,@types/core-js包的维护远不如您已引用的lib.es2017.d.ts声明。

由于您已列出了依赖项,并且@types/core-js不在其中,因此可能会以传递方式进行安装。由于它包含全局声明,因此本质上存在问题。

要解决此问题,请在"types"中明确设置tsconfig.json属性。这可以控制TypeScript编译器包含 全局 @types包。

以下是一个例子:

{
  "compilerOptions": {
    "types": [],

    "module": "esnext",
    "lib": ["dom", "es2017"]
  }
}

要在此类设置中包含全局 @types声明,您必须在新添加的属性中引用它们。

以下是一个例子:

 {
  "compilerOptions": {
    "types": ["bootstrap", "mocha"],

    "module": "esnext",
    "lib": ["dom", "es2017"]
  }
}

备注:

  1. 请确保明确依赖任何@types软件包,方法是将它们与软件包管理器一起安装。依赖传递依赖性将导致非确定性构建,不可预测的CI失败以及一般混乱。

  2. @types/core-js包中包含超出ES2017范围的API声明。如果您需要访问这些类型,请将--lib的规格编号值更改为esnext,如

    {
      "compilerOptions": {
        "lib": ["dom", "esnext"]
      }
    }
    
  3. 您有许多过时且不一致的依赖项。特别是"typings": "^1.3.2"非常旧,应该更新。 typings也应安装为开发依赖项,这是所有包管理器支持的功能,包括typings本身。