web-dev-qa-db-fra.com

Quelle est la signification de cette erreur "Déclaration du champ d'instance non autorisée après la déclaration de la méthode d'instance".

Dans mon projet Angular2, je reçois cette erreur:

"La déclaration du champ d'instance n'est pas autorisée après la déclaration de la méthode d'instance. Elle doit plutôt figurer au début de la classe/interface. (Member-ordering)"

J'aimerais comprendre comment résoudre ce problème et pourquoi je l'obtiens.

L'erreur est liée à la fonction privée dans le code suivant:

export class HomeComponent implements OnInit {
public error: string;
public shirts = [];


constructor(public rest: RestService,
            public scService: ShoppingCartService,
            public snackBar: MdSnackBar) {
}


ngOnInit() {
    this.rest.getAll().subscribe((r: any) => {
        this.shirts = r;
    }, error => {
        this.error = 'Opps there\'s some error';
    });

}

addToCart(shirt: any) {
    this.scService.add(shirt);
    this.showSnackMessage('Added to Chart List');
}

showSnackMessage(message: string) {
    this.snackBar.open(message, null, {
        duration: 1000
    });
}
//Here the error is showed
private sizeScore = {
    'string': -1,
    s: 0,
    m: 1,
    l: 2,
    'x-large': 3,
};

sortData(sort: Sort) {
    const data = this.shirts.slice();
    if (!sort.active || sort.direction === '') {
        this.shirts = data;
        return;
    }

    this.shirts = data.sort((a, b) => {
        let isAsc = sort.direction === 'asc';
        switch (sort.active) {
            case 'colour':
                return compare(a.colour, b.colour, isAsc);
            case 'size':
                return compare(this.sizeScore[a.size], this.sizeScore[b.size], isAsc);
            default:
                return 0;
        }
    });
}
}
8
Jakub

J'imagine que votre projet a un type de charpie mis en place qui vérifie les problèmes de style au moment de la construction. 

Pour résoudre ce problème, il vous suffit de faire ce qui est écrit. Déplacez le code avant tout appel de méthode.

export class HomeComponent implements OnInit {
public error: string;
public shirts = [];
private sizeScore = {
    'string': -1,
    s: 0,
    m: 1,
    l: 2,
    'x-large': 3,
};
// ...
9
DeborahK

Il ne s’agit pas d’une erreur de compilation/exécution, mais d’un problème de linting de code.

Il est recommandé de placer toutes les propriétés de votre classe au-dessus des méthodes. Ainsi, si vous déplacez simplement private sizeScore vers le haut, il cessera de dire.

Plus d'informations sur cette règle ici .

3
Edmundo Rodrigues

Selon le TSLint docs Je pense que vous devez simplement déplacer votre déclaration du champ au-dessus des déclarations de ces méthodes.

0
arthurakay