(TS)在'const'enum声明中,成员初始值设定项必须是常量表达式

时间:2018-05-27 16:04:59

标签: asp.net angular typescript

我在Visual Studio 2017中构建应用程序时遇到问题。我正在使用ASP.NET CORE 2和Angular 6.运行应用程序后,我从node_modules文件output_ast.d.ts收到错误:

  

(TS)在'const'enum声明中,成员初始值设定项必须是常量   表达

  

构建:在'const'enum声明中,成员初始值设定项必须是常量表达式。

错误代码:

export declare const enum JSDocTagName {
    Desc = "desc",
    Id = "id",
    Meaning = "meaning",
}

我的package.json

  "name": "client-app",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^6.0.0",
    "@angular/common": "^6.0.0",
    "@angular/compiler": "^6.0.0",
    "@angular/core": "^6.0.0",
    "@angular/forms": "^6.0.0",
    "@angular/http": "^6.0.0",
    "@angular/platform-browser": "^6.0.0",
    "@angular/platform-browser-dynamic": "^6.0.0",
    "@angular/router": "^6.0.0",
    "core-js": "^2.5.4",
    "rxjs": "^6.0.0",
    "zone.js": "^0.8.26"
  },
  "devDependencies": {
    "@angular/compiler-cli": "^6.0.0",
    "@angular-devkit/build-angular": "~0.6.1",
    "typescript": "~2.7.2",
    "@angular/cli": "~6.0.1",
    "@angular/language-service": "^6.0.0",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~1.4.2",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.3.0",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1"
  }
}

应用程序类似于本文https://www.codeproject.com/Articles/1245243/How-to-Create-an-App-with-Angular-and-ASP-NET-C 但角度应用程序位于名为ClientApp的分隔文件夹中。 我尝试了不同版本的ts和角度cli,没有任何帮助。我该怎么办这个错误?

5 个答案:

答案 0 :(得分:5)

在Visual Studio中,检查项目属性 - > TypeScript构建部分中的设置,并确保将TypeScript版本设置为"使用最新可用的"或者至少是最近的事情。我怀疑它当前设置为TypeScript支持的字符串枚举之前的东西。

答案 1 :(得分:1)

我经历了完全相同的行为,并且似乎是TS版本的不兼容问题。而不是将TypeScript版本更改为"使用最新的"如上所述,我能够通过将TypeScript版本更改为2.2来解决。

答案 2 :(得分:0)

要获得字符串枚举,您只需执行以下操作

export enum JSDocTagName {
    Desc = "desc",
    Id = "id",
    Meaning = "meaning",
}

根据documentation

答案 3 :(得分:0)

tldr;升级Visual Studio使用的TypeScript编译器。

当引入枚举的字符串初始化程序:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html时,Visual Studio 2017可能正尝试使用比2.4更旧的TypeScript构建项目。

这里需要了解3种不同的TypeScript编译器:

  • Angular CLI:使用本地项目node_modules / typescript文件夹
  • NPM:使用全局安装的TS编译器(在Windows上为%AppData%/ npm / Roaming)
  • Visual Studio:在C:\ Program Files(x86)\ Microsoft SDKs \ TypeScript中使用TS编译器

要升级VS使用的TypeScript编译器,请转到https://marketplace.visualstudio.com并搜索最新的TypeScript扩展名。安装它,重新启动Visual Studio,然后在“项目”设置中确保将TypeScript构建版本设置为该新版本。现在,如果您进行重建,该错误应该会消失。

答案 4 :(得分:0)

@ben-barreth 建议的答案对我来说似乎也是如此。 VS Code 的 tsc 似乎是 <2 版本。但不是升级 vscode 插件,更方便的方法是使用带有显式路径的 npm 包 tsc ./node_modules/.bin/tsc。

$ ./node_modules/.bin/tsc --version
Version 4.3.2

$ tsc --version
message TS6029: Version 1.5.3