2016-11-28 1 views
1

Ich befolge einen PluralSight-Kurs und übe das Schreiben eines Basisdienstes in Angular2. Ich habe die folgende Service-Datei:Fehler TS7027: Nicht erreichbarer Code in Angular2 TypeScript erkannt Dienstklasse

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'} 
     ]; 
    } 
} 

Wenn ich die Lite-Server npm start mit Start ich folgende Fehlermeldung erhalte:

[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. 

Wenn Ich kommentiere den Rückgabe-Block aus, der Lite-Server startet gut, also scheint es etwas in dieser Rückkehr zu sein, das es nicht mag. Jede Hilfe wäre willkommen.

+0

Wird 'getCustomers' überhaupt jemals aufgerufen? – jonrsharpe

+8

möglich duplicate von http://stackoverflow.com/questions/8528557/why-doesnt-a-javascript-return-statement-work-when-the-return-value-is-on-a-new versuchen Sie, Ihre Rückgabe Array in der gleichen Zeile wie die Return-Anweisung – LLai

Antwort

1

Wenn Sie Ihre ganze Reihe in eine neue Zeile nach der return-Anweisung platzieren, dann Ihre Methode hat zwei Aussagen:

  • Rückkehr undefined
  • ein Array Definition

Der Fehler, den Sie sehen, ist ein ziemlich hilfreicher. TypeScript sagt Ihnen, dass es Code (die Array-Definition) gibt, der nie erreicht werden konnte, weil Sie von der Funktion zurückkommen, bevor die Array-Zeile erreicht werden kann.

So ist die Lösung ziemlich einfach. Verschieben Sie mindestens die öffnende Klammer in die Zeile der Return-Anweisung wie return [. Das ist es.

+0

Das war es; Danke! – Flea

1

Ich zwickte es ein wenig. Dies sollte funktionieren:

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

oder wenn Sie das Original das neue Array braucht wollen auf der gleichen Linie zu starten:

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'} 
     ]; 
    } 
} 
+0

Ja, das war es! Die neue Linie da drin! Danke für die Hilfe! – Flea

0

Es passiert normalerweise, wenn Sie nach einer return-Anweisung Code eingeben oder wenn Sie eine if-Anweisung zurückgeben und den else-Code vergessen.

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

Eigenschaften in EcmaScript/Typescript macht es mehr wie Java oder C#. Verwenden Sie also immer let oder const Schlüsselwörter in Ihrem Code.

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