Свойство "..." не имеет инициализатора и определенно не назначено в конструкторе
в моем приложении 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);
}
}
но в собственности "делает" у меня есть ошибка. Я не знаю, что с этим делать...
Ответы
Ответ 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. Начало.