2016-05-07 2 views
1

У меня есть метод доступа к данным, в котором я использую карту для того, чтобы преобразовать хэш в массив, так что я могу перебрать их, на мой взгляд:Указание типа возвращаемого значения в методе angular2 машинопись

public getCrawlsStatuses():Observable<ICrawlsStatus[]> { 

     let _statusesURL:string = `${this.API_URL}/crawl_statuses`; 

     return this._http.get(_statusesURL) 
      .map((res:Response) => { 
       let statuses:ICrawlsStatus[] = []; 
       Object.keys(res.json()).map(key => { 
        statuses.push({ 
         name: key, 
         total: res.json()[key] 
        }) 
       }); 
       return statuses; 
      }) 
      .catch(CrawlsService.onError); 
    } 

Однако я найти переменные статусы немного излишнего, поэтому решил сократить отображение, просто используя возврат методы отображения наблюдаемой-х:

public getCrawlsStatuses():Observable<ICrawlsStatus[]> { 

     let _statusesURL:string = `${this.API_URL}/crawl_statuses`; 

     return this._http.get(_statusesURL) 
      .map((res:Response) => { 
       return Object.keys(res.json()).map(key => { 
        return { 
         name: key, 
         total: res.json()[key] 
        } 
       }); 
      }) 
      .catch(CrawlsService.onError); 
    } 

Это с точкой зрения проверки типа работает нормально для компонентов вне здесь, так как они должны ожидайте crawlsStatuses: ICrawlsStatus[];, но для жизни меня Я не могу найти способ сделать возвращаемый объект, чтобы иметь тип внутренне, что-то вроде:

return <ICrawlsStatus>{ 
    name: key, 
    total: res.json()[key] 
} 

Я хотел бы получить сообщение об ошибке, если возвращаемые ключи не совпадают мой интерфейс. например имена, полностью ....

ответ

3

Но для жизни меня я не могу найти способ сделать возвращаемый объект, чтобы иметь тип внутренне, что-то вроде

Просто создайте локальный переменная:

const result: ICrawlsStatus = { 
    name: key, 
    total: res.json()[key] 
} 
return result; 

Больше

вы должны избегать типа утверждения столько, сколько вы можете: https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

+0

Это интересно, но в этом случае результат будет более или менее избыточной переменной, подобной моему методу массива. Я надеялся, что будет больше 1 лайнера, который вернет тип ICrawlsStatus. что это невозможно? – XGreen

+0

Также относительно утверждения типа вы бы не пытались включить здесь тип, если бы вы это делали? – XGreen

Смежные вопросы