web-dev-qa-db-fra.com

La propriété '...' n'a pas d'initialiseur et n'est pas définitivement attribuée au constructeur

dans mon Angular application, j'ai un composant:

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);
  }
}

mais dans le "fait" la propriété j'ai une erreur. Je ne sais pas quoi faire avec ça ...

mistake

36

Je pense que vous utilisez la dernière version de TypeScript. Veuillez vous reporter à la section "Initialisation de classe stricte" dans link.

Il y a deux façons de résoudre ce problème:

A. Si vous utilisez VSCode, vous devez changer la version de TS utilisée par l'éditeur.

B. Simplement initialiser le tableau lorsque vous le déclarez dans le constructeur,

makes: any[] = [];

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

Il suffit d'aller à tsconfig.json et de définir

"strictPropertyInitialization": false

se débarrasser de l'erreur de compilation.

Sinon, vous devez initialiser toutes vos variables, ce qui est un peu gênant

61
Martin Čuka

C'est parce que TypeScript 2.7 inclut une vérification de classe stricte où toutes les propriétés doivent être initialisées dans le constructeur. Une solution consiste à ajouter le ! en tant que postfixe au nom de la variable:

makes!: any[];
22
Harinath

Vous devez soit désactiver le --strictPropertyInitialization mentionné par Sajeetharan, soit faire quelque chose comme ceci pour satisfaire à l'exigence d'initialisation:

makes: any[] = [];
5
kshetline

Vous pouvez également procéder comme suit si vous ne voulez vraiment pas l'initialiser.

makes: any[] | undefined;
1
SpeedOfSpin