Tipo de retorno genérico de función en Typescript
Soy nuevo en ts pero he aprendido un poco sobre el concepto de genéricos en java. La consulta es que tengo tres funciones: searchTrack, searchAlbum, searchArtist
searchTrack(query: string): Observable<Track[]> {
return this.search(query, 'track');
}
searchArtist(query: string): Observable<Artist[]> {
return this.search(query, 'artist');
}
searchAlbum(query: string): Observable<Album[]> {
return this.search(query, 'album');
}
Quiero una función general 'search' en esta clase que tome la consulta y el tipo de entidad y devuelva un Observable de una colección de un tipo específico de entidad. Estoy atascado aquí. ¿Cómo puedo trabajar con genéricos para especificar un tipo de retorno genérico de una función?
search(query: string, type: string): Observable<Array<T>> {
return this.query(`/search`, [
`q=${query}`,
`type=${type}`
]);
}
¿Hay alguna manera de que pueda lograr esto?
Respuesta #1
Intenta usar la clase Array en lugar de []. También define un tipo genérico T en la función de búsqueda.
search<T>(query: string, type: string): Observable<Array<T>> {
return this.query(`/search`, [
`q=${query}`,
`type=${type}`
]);
}
Deberías poder llamarlo así:
let result = search<Artist>('someQuery', 'artist');
Puedes encontrar más sobre genéricos en TypeScript en el capítulo de Genéricos del manual aquí.
