2016-11-28 60 views
1

我正在跟着一個PluralSight課程並練習在Angular2中編寫基本服務。我有以下服務文件:錯誤TS7027:在Angular2中檢測到無法訪問的代碼TypeScript服務類

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

當我使用npm start我收到以下錯誤啓動的精簡版服務器:

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

當我註釋掉了返回塊,lite-server啓動正常,所以它似乎是它不喜歡的回報。任何幫助,將不勝感激。

+0

getCustomers真的被調用嗎? – jonrsharpe

+8

http://stackoverflow.com/questions/8528557/why-doesnt-a-javascript-return-statement-work-when-the-return-value-is-on-a-new 嘗試移動您的返回的數組與return語句相同的行 – LLai

回答

1

如果你把你的整個陣列在一個新行return語句後,那麼你的方法有兩種說法:

  • 回報不確定
  • 數組定義

您看到的錯誤非常有幫助。 TypeScript告訴你有代碼(數組定義)永遠不可能到達,因爲你已經在函數返回之前就已經可以到達數組了。

所以解決方案非常簡單。將至少前括號移動到返回語句的行中,如return [。而已。

+0

就是這樣;謝謝! – Flea

1

我調整了一下。這應該工作:

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

,或者如果你想在原來的新陣列需要開始在同一行:

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

是的,就是這樣!那裏有新的線路!謝謝您的幫助! – Flea

0

它通常發生在您將一些代碼放在return語句之後,或者當您在if語句中返回並且您忘記其他代碼時。

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

EcmaScript/Typescript中的功能使它更像Java或c#。所以在代碼中總是使用let或const關鍵字。

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