javascript-属性“ ...”没有初始化程序,因此未在constru中明确分配

在我的Angular应用中,我有一个组件:

import { MakeService } from './../../services/make.service';
import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-vehicle-form',
  templateUrl: './vehicle-form.component.html',
  styleUrls: ['./vehicle-form.component.css']
})
export class VehicleFormComponent implements OnInit {
  makes: any[];
  vehicle = {};

  constructor(private makeService: MakeService) { }

  ngOnInit() {
    this.makeService.getMakes().subscribe(makes => { this.makes = makes
      console.log("MAKES", this.makes);
    });
  }

  onMakeChange(){
    console.log("VEHICLE", this.vehicle);
  }
}

但是在“ makes”属性中,我有一个错误。我不知道该怎么办...

mistake

6个解决方案
70 votes

只需转到tsconfig.json并设置

"strictPropertyInitialization": false

摆脱编译错误。

否则,您需要初始化所有变量,这有点烦人

Martin Čuka answered 2020-08-10T19:24:16Z
27 votes

我认为您正在使用最新版本的TypeScript。 请参见link中的“严格类初始化”部分。

有两种方法可以解决此问题:

答:如果使用的是VSCode,则需要更改编辑器使用的TS版本。

B.在构造函数中声明数组时,只需对其进行初始化,

makes: any[] = [];

constructor(private makeService: MakeService) { 
   // Initialization inside the constructor
   this.makes = [];
}
Sajeetharan answered 2020-08-10T19:23:47Z
23 votes

这是因为TypeScript 2.7包含严格的类检查,所有属性都应在构造函数中初始化。 解决方法是添加 !作为变量名称的后缀:

makes!: any[];
Harinath answered 2020-08-10T19:24:36Z
5 votes

您要么需要禁用--strictPropertyInitializationSajeetharan提到了,或做这样的事情来满足初始化要求:

makes: any[] = [];
kshetline answered 2020-08-10T19:24:56Z
2 votes

如果您确实不想初始化它,也可以执行以下操作。

makes: any[] | undefined;
SpeedOfSpin answered 2020-08-10T19:25:16Z
0 votes

当您使用typescript@2.9.2进行升级时,其编译器严格遵循在组件类构造函数中声明数组类型的规则。

为了解决此问题,请更改代码在代码中声明的位置,或者避免编译器在“ tsconfig.json”文件中添加属性“ strictPropertyInitialization”:false并再次运行npm start。

Angular Web和移动应用程序开发可以访问www.jtechweb.in

Jai Govind Gupta answered 2020-08-10T19:25:45Z
translate from https://stackoverflow.com:/questions/49699067/property-has-no-initializer-and-is-not-definitely-assigned-in-the-construc