web-dev-qa-db-fra.com

erreur TS7027: Code inaccessible détecté dans la classe de service AngScript2 TypeScript

Je suis un cours PluralSight et j'écris un service de base dans Angular2. J'ai le fichier de service suivant:

customer.service.ts

import { Injectable } from '@angular/core';

@Injectable()
export class CustomerService {

    constructor() {}

    getCustomers() {
        return 
        [
            {id: 1, name: 'Ward'},
            {id: 2, name: 'Joe'},
            {id: 3, name: 'Bill'},
            {id: 4, name: 'Bob'},
            {id: 5, name: 'Levi'},
            {id: 6, name: 'Brian'},
            {id: 7, name: 'Susie'}
        ];
    }
}

Lorsque je lance le serveur lite avec npm start, le message d'erreur suivant s'affiche:

[email protected] start C:\Dev\my-proj
tsc && concurrently "tsc -w" "lite-server"

app/customer/customer.service.ts(10,3): error TS7027: Unreachable code detected.

Lorsque je commente le bloc de retour, le serveur lite démarre correctement, il semble donc y avoir quelque chose dans ce retour qu'il n'aime pas. Toute aide serait appréciée.

5
Flea

Si vous placez tout votre tableau sur une nouvelle ligne après l'instruction return, votre méthode comporte alors deux instructions:

  • retourne non défini
  • une définition de tableau

L'erreur que vous voyez est très utile. TypeScript vous indique qu'il existe un code (la définition de tableau) qui n'a jamais pu être atteint, car vous revenez de la fonction déjà avant que la ligne de tableau puisse être atteinte.

Donc, la solution est assez simple. Déplacez au moins la parenthèse d'ouverture dans la ligne de l'instruction return, telle que return [. C'est tout.

8
Andreas Jägle

Je l'ai légèrement modifié. Cela devrait fonctionner:

import {Injectable} from "@angular/core";

@Injectable()
export class CustomerService
{
    private data: Array<any>;

    constructor()
    {
        this.data = [
            {id: 1, name: 'Ward'},
            {id: 2, name: 'Joe'},
            {id: 3, name: 'Bill'},
            {id: 4, name: 'Bob'},
            {id: 5, name: 'Levi'},
            {id: 6, name: 'Brian'},
            {id: 7, name: 'Susie'}
        ];
    }

    getCustomers()
    {
        return this.data;
    }
}

ou si vous voulez l'original, le nouveau tableau doit commencer sur la même ligne:

import {Injectable} from "@angular/core";

@Injectable()
export class CustomerService
{

    constructor()
    {
    }

    getCustomers()
    {
        return [
            {id: 1, name: 'Ward'},
            {id: 2, name: 'Joe'},
            {id: 3, name: 'Bill'},
            {id: 4, name: 'Bob'},
            {id: 5, name: 'Levi'},
            {id: 6, name: 'Brian'},
            {id: 7, name: 'Susie'}
        ];
    }
}
2
run yards

J'ai résolu le problème pour mon cas

J'ai eu l'erreur à cause d'une expression "break" inutile:

case "A": return false; break;

J'ai enlevé la "pause";

case "A": return false;

Résolu.

1
Esref Atak

Cela se produit généralement lorsque vous insérez du code après une instruction return ou lorsque vous avez un retour dans une instruction if et que vous oubliez le code else.

...
return warning;
this.methodUnreacheable();
0
J C

Les fonctionnalités dans EcmaScript/TypeScript le rendent plus proche de Java ou de c #. Utilisez donc toujours des mots-clés let ou const dans votre code.

let mood:Boolean=true;
if(mood){
console.log('true');
}
else{
console.log('false');
}
0
Siddharth