Ionic 4(非电容器)构建失败,出现 @firebase/logger 错误 [TS1068:无法在环境上下文中声明访问器]

Ionic 4 (not capacitor) build failed with @firebase/logger error [TS1068: An accessor cannot be declared in an ambient context]

firebase@angular/fire 添加到我的项目后,Ionic 构建失败。我已经使用 firebase 和 angularFire 多年了,但是在构建时突然出现了这个问题。

似乎与文件 logger.d.ts 相关的问题,但是,我什至没有使用 firebase 的记录器。一定是内部电话,在网上搜索了几个小时但找不到答案,希望有人可能早些时候遇到过这个问题?可以说明一下吗?

下面是错误信息图片

> ng run app:build

ERROR in node_modules/@firebase/logger/dist/src/logger.d.ts:70:9 - error TS1086: An accessor cannot be declared in an ambient context.

70     get logLevel(): LogLevel;
           ~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:71:9 - error TS1086: An accessor cannot be declared in an ambient context.

71     set logLevel(val: LogLevel);
           ~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:77:9 - error TS1086: An accessor cannot be declared in an ambient context.

77     get logHandler(): LogHandler;
           ~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:78:9 - error TS1086: An accessor cannot be declared in an ambient context.

78     set logHandler(val: LogHandler);
           ~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:83:9 - error TS1086: An accessor cannot be declared in an ambient context.

83     get userLogHandler(): LogHandler | null;
           ~~~~~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:84:9 - error TS1086: An accessor cannot be declared in an ambient context.

84     set userLogHandler(val: LogHandler | null);
           ~~~~~~~~~~~~~~

[ERROR] An error occurred while running subprocess ng.

        ng run app:build exited with exit code 1.

        Re-running this command with the --verbose flag may provide more information.

我的 package.json 如下所示

"dependencies": {
    "@angular/common": "~8.2.14",
    "@angular/core": "~8.2.14",
    "@angular/fire": "^5.4.2",
    "@angular/forms": "~8.2.14",
    "@angular/platform-browser": "~8.2.14",
    "@angular/platform-browser-dynamic": "~8.2.14",
    "@angular/router": "~8.2.14",
    "@ionic-native/core": "^5.0.0",
    "@ionic-native/device": "^5.23.0",
    "@ionic-native/http": "^5.23.0",
    "@ionic-native/splash-screen": "^5.0.0",
    "@ionic-native/status-bar": "^5.0.0",
    "@ionic/angular": "^5.0.0",
    "cordova-android": "8.1.0",
    "cordova-ios": "5.1.1",
    "cordova-plugin-advanced-http": "^2.4.1",
    "cordova-plugin-file": "^6.0.2",
    "core-js": "^2.5.4",
    "firebase": "^7.13.1",
    "lodash": "^4.17.15",
    "rxjs": "~6.5.1",
    "tslib": "^1.9.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.803.20",
    "@angular/cli": "~8.3.23",
    "@angular/compiler": "~8.2.14",
    "@angular/compiler-cli": "~8.2.14",
    "@angular/language-service": "~8.2.14",
    "@ionic/angular-toolkit": "^2.1.1",
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/lodash": "^4.14.149",
    "@types/node": "~8.9.4",
    "codelyzer": "^5.0.0",
    "cordova-plugin-device": "^2.0.2",
    "cordova-plugin-ionic-keyboard": "^2.2.0",
    "cordova-plugin-ionic-webview": "^4.1.3",
    "cordova-plugin-splashscreen": "^5.0.2",
    "cordova-plugin-statusbar": "^2.4.2",
    "cordova-plugin-whitelist": "^1.3.3",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "npm-force-resolutions": "0.0.3",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.15.0",
    "typescript": "~3.4.3"
  },

如果有人可以,请提供帮助。

我在尝试从 7.11.0 及更高版本升级我的 firebase 包时也遇到了这个问题。尝试将 firebase 版本修复为 7.11.0.

至于真正的长期解决方案,我也很感兴趣。

解决方案 1

您需要使用 TypeScript 3.7。
从 TypeScript 3.7 release notes :

To detect the issue around accessors, TypeScript 3.7 will now emit get/set accessors in .d.ts files so that in TypeScript can check for overridden accessors.

因此您需要升级到 TypeScript 3.7 或使用更早版本的 Firebase

解决方案 2

在您的 tsconfig.json 中将 skipLibCheck 设置为 true

"compilerOptions": {
  "skipLibCheck": true,
  ...
}

我遇到了 Ionic 4 的问题,我已将 Firebase 降级到 7.10。

不能将 Typescript > 3.6 与 Angular 8 一起使用,或者引发 ERROR in The Angular Compiler requires TypeScript >=3.4.0 and <3.6.0 but 3.8.3 was found instead.

我没有尝试切换 skipLibCheck 编译器选项,这似乎不是一个长期的解决方案。

顺便说一句,感谢大家的话题,拯救我的一天;-)