TypeError:对象原型只能是Object或为null:undefined Angular 8

时间:2019-08-08 22:52:20

标签: angular typescript

每当我尝试启动Web应用程序时,都会出现此Type错误。不知道为什么。

更新一些软件包后,我开始获取它。我无法弄清楚是哪个问题,或者是为什么错误指向的代码出错,因为它是我在Angular 8的依赖项中的代码。我不太确定该错误告诉我什么。 我试图更新所有依赖项。我查看了几乎所有类似的问题解决方案,但它们没有起作用。我不知道是编译器错误,打字稿还是依赖项错误。

错误

{
  "name": "nh",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "heroku-postbuild": "ng build --prod"
  },
  "keywords": [
    "heroku"
  ],
  "private": true,
  "dependencies": {
    "@agm/core": "^1.0.0-beta.6",
    "@angular-devkit/build-angular": "^0.13.0",
    "@angular/animations": "~8.1.2",
    "@angular/common": "~8.1.2",
    "@angular/core": "~8.1.2",
    "@angular/forms": "~8.1.2",
    "@angular/platform-browser": "~8.1.2",
    "@angular/platform-browser-dynamic": "~8.1.2",
    "@angular/router": "~8.1.2",
    "@types/googlemaps": "^3.37.0",
    "core-js": "^2.5.4",
    "font-awesome": "^4.7.0",
    "hammerjs": "^2.0.8",
    "ngx-gallery": "^5.10.0",
    "rxjs": "~6.5.2",
    "tslib": "^1.9.0",
    "zone.js": "^0.9.1"
  },
  "devDependencies": {
    "@angular/cli": "^7.3.9",
    "@angular/compiler": "^7.2.15",
    "@angular/compiler-cli": "^8.1.2",
    "@angular/language-service": "~8.1.2",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.5.0",
    "enhanced-resolve": "^3.3.0",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.11.0",
    "typescript": "^3.4.5"
  },
  "engines": {
    "node": "10.16.0",
    "npm": "6.9.0"
  }
}

PACKAGE.JSON

%c

我希望该应用能够编译,构建和启动。每当我尝试ng服务,ng测试或ng构建时,都会出现此错误。

8 个答案:

答案 0 :(得分:12)

在将CLI全局更新到版本8并通过在项目目录中运行以下命令将项目中的angular升级到最新版本后,我的angular@7项目遇到了同样的问题:

ng update @angular/cli @angular/core

此外,这里提到的升级时还有其他注意事项: https://update.angular.io/#7.0:8.0

答案 1 :(得分:9)

使用public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); final Uri uri = intent.getData(); Intent intentForActivity = new Intent(this, MainActivity.class); if (uri != null) intentForActivity.putExtra("URI", uri.toString()); intentForActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intentForActivity); this.finish(); } } 运行测试时,我在Angular应用程序中遇到了相同的错误。

就我而言,问题的原因是循环依赖项

我有两个类属于某个ng test的一部分,但是其中一个使用相同的索引导入了另一个。之所以造成循环依赖,是因为index.ts被多次导入。

一旦删除了循环依赖关系,一切都将正常工作。

我的灵感来自:https://stackoverflow.com/a/53123468/3497671

答案 2 :(得分:5)

使用标志allow-dirty可以绕过回购检查。

ng update @angular/cli @angular/core --allow-dirty

答案 3 :(得分:1)

对离子用户:在我的情况下,问题是当前的角度/离子cli版本和角度/离子应用程序版本之间不兼容。

要解决的步骤:

1)使用ionic版本3创建一个新项目,然后比较文件packages.json。

ionic start Ionic3Project blank --type=ionic-angular

2)在Ionic3Project文件夹中,构建android

ionic cordova build android --prod

3)打开主项目的packages.json并更改以下版本的依赖项:

"@angular/*"
"@ionic-native/*"
"rxjs"
Also, replace the "scripts" part.

4)删除您的node_modules文件夹。

5)删除平台android文件夹(整个平台文件夹或仅android文件夹)。

6)运行npm install

7)添加平台android

ionic cordova platform add android

8)再次构建您的应用

ionic cordova build android --prod

按照这些步骤操作后,我可以再次构建我的应用程序。

不好。:在这些步骤之间,您可能会遇到一些与插件有关的问题。在这种情况下,您可能需要重新安装插件。做到这一点,并牢记这些步骤。重新安装插件后,尝试删除并重新添加android。

答案 4 :(得分:0)

在我的Ionic应用程序中,我使用npm i @angular/compiler-cli@5.2.11将Angular CLI从8.x.x降级到5.2.11,并且可以正常工作

答案 5 :(得分:0)

我遇到了这个问题,阅读了Francesco Borzi的回答,发现进口顺序可能很重要:

我使用index.ts 在index.ts中,我导入任何本地“ ./*”类,然后立即导出它们 进口顺序为

import { Class2 } from './class2';
import { Class1 } from './class1';

在Class2中,我会有一个

import Class1 from '.'

export Class2 extends Class1

它试图首先编译Class2,而Class2引用Class1。我在index.ts中反转了导入,现在可以使用

答案 6 :(得分:0)

这是我在Angular 9上发生的,所以我将这个答案留给那些正在寻找该版本修复程序的人...我通过删除node_modules文件夹并重新安装来修复了它。这确保了ngcc被迫重新编译依赖关系。只需确保您的postinstall NPM脚本如下:

"postinstall": "ngcc"

答案 7 :(得分:0)

我有同样的问题 固定方式如下:

npm i @angular/compiler-cli@~8.0.0