Свойство "..." не имеет инициализатора и определенно не назначено в конструкторе

в моем приложении 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);
  }
}

но в собственности "делает" у меня есть ошибка. Я не знаю, что с этим делать...

mistake

Ответ 1

Я думаю, вы используете последнюю версию TypeScript. См. Раздел "Строгая инициализация класса" в link.

Есть два способа исправить это:

О. Если вы используете VSCode, вам нужно изменить версию TS, которую использует редактор.

B. Просто инициализируйте массив, когда вы объявите его внутри конструктора,

makes: any[] = [];

constructor(private makeService: MakeService) { 
   // Initialization inside the constructor
   this.makes = [];
}

Ответ 2

Просто зайдите в tsconfig.json и установите

"strictPropertyInitialization": false

чтобы избавиться от ошибки компиляции.

В противном случае вам нужно инициализировать все ваши переменные, что немного раздражает

Ответ 3

Это потому, что TypeScript 2.7 включает строгую проверку класса, в которой все свойства должны быть инициализированы в конструкторе. Обходным путем является добавление ! как постфикс к имени переменной:

makes!: any[];

Ответ 4

Вам необходимо отключить --strictPropertyInitialization о котором упоминал Sajeetharan, или сделать что-то подобное для удовлетворения требования инициализации:

makes: any[] = [];

Ответ 5

Вы также можете сделать следующее, если вы действительно не хотите его инициализировать.

makes: any[] | undefined;

Ответ 6

При обновлении с использованием [email protected] строгие правила его компилятора следуют правилам объявления типа массива внутри конструктора класса компонента.

Для исправления этой проблемы либо измените код, объявленный в коде, либо не добавляйте компилятору свойство "strictPropertyInitialization": false в файл "tsconfig.json" и снова запускайте npm. Начало.