私有标识符仅适用于目标ECMAScript 2015及更高版本(Angular 9)。

18

我正在将Angular 8.2升级到9.1,并尝试将私有字段更改为#fieldName: any,这是由TS 3.8允许的,而不是private fieldName: any。但是编译器出现以下错误:

仅在目标ECMAScript 2015(ES6)及更高版本中才可用私有标识符。

tsconfig.json:

{
    "compilerOptions": {
        "module": "esnext"
        "target": "es2015",
    }
}

包描述文件(package.json):

"devDependencies": {
   "typescript": "3.8.3"
}

哦,错误信息是错误的,因为ES2015 没有私有标识符。编辑:显然我也看不懂,因为这是TS编译器... - VLAZ
@VLAZ 有没有一个来源可以证明 ES2015 没有私有标识符? - duhaime
1
@duhaime 私有字段是第四阶段的提案(请在表格中查看“类字段”),因此不能包含在规范中。关于2015年的规范不包含它们,发布的规范-ES2021/ES12也不包含它们。私有字段已经包含在最新的草案中,因此预计它们将包含在即将发布的ES2022/ES13规范中。 - VLAZ
2个回答

9
tsconfig.json中,你必须将es2015替换为更近期的版本以支持此功能。尝试用es2017替换es2015,我认为使用es2017是最好的版本。

2

除非您的 package.json 中有 "type":"module",否则在使用最新的目标或 ES2015 之后的版本时,在 tsconfig 中始终添加 "module":"commonJS"

{
  "compilerOptions": {
    "sourceMap": true,
    "outDir": "dist",
    "target": "ESNext",
    "module": "CommonJS",
    "strict": true,
    "lib": ["esnext"],
    "esModuleInterop": true
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接