angular - Especificando el tipo de retorno en un método de Typescript de Angular2
Tengo un método de acceso a datos en el que utilizo map para transformar un hash en un array para poder iterar sobre ellos en mi vista:
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);
}
Sin embargo, encuentro que los estados de las variables son un poco redundantes, así que decidí acortar el mapeo simplemente utilizando el retorno del método map del observable:
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);
}
En términos de verificación de tipos, esto funciona bien para los componentes fuera de aquí, ya que necesitan esperar crawlsStatuses: ICrawlsStatus[];, pero por más que lo intento no puedo encontrar una manera de hacer que el objeto devuelto tenga un tipo internamente también, algo como:
return <ICrawlsStatus>{
name: key,
total: res.json()[key]
}
Me gustaría obtener un error si las claves devueltas no coinciden con mi interfaz. Por ejemplo, nombres, totalmente...
Respuesta #1
Pero por más que lo intento no puedo encontrar una manera de hacer que el objeto devuelto tenga un tipo internamente también, algo como
Simplemente crea una variable local:
const result: ICrawlsStatus = {
name: key,
total: res.json()[key]
}
return result;
Más
Deberías evitar la aserción de tipos tanto como puedas: https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html
