No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

2D
4H
9M
59S

Generics en clases

22/25
Recursos

Aportes 14

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Literal pas茅 las 2 clases pregunt谩ndome por qu茅 esto era importante, hasta que la luz salvadora me ilumin贸 en un instante de raciocinio, y comprend铆 la magnitud de Generics. Sencillamente, wow.

驴Esto servir铆a para crear un Backend completo con Node? Si alguien tiene un ejemplo, se lo agradecer铆a.

Mi cerebro exploto, pero entendi muchas cosas con esta clase 馃槃

Vengo usando JS para el backend pero con esto pues no hay pierde. Me cambio a usar TS desde ahora. jeje

Tambien se puede escribir usando la convencion de nombres para genericos, que es comunmente con lo que te vas a topar

export class BaseHttpService<T> {

  constructor(
    private url: string
  ){}

  async getAll(): Promise<T[]> {
    const { data } = await axios.get<T[]>(this.url);
    return data;
  }
}

Una Clase elegante, poderosa la utilidad de los generics cuando lo entiendes.

Personalizando la clase en execution time.

Parece que ya no sirve la api 馃槙

馃く馃く馃く

Typescript the best馃挋

Tuve que mirar la clases dos veces para poder entender un poco m谩s acerda de la clases generics pero aqu铆 est谩 el resumen que pude sacar

RESUMEN:
Este es un servivio generico que podemos utilizar solamente pasando el tipo de dato
que queremos utulizar o hacer request, eso nos ahorraria hacer un servicio para
productos, categorias, usuarios etc鈥

Ser铆a mucho mejor pasar la url en el m茅todo, y no el constructor, ya que si transformamos nuestro servicio a un singleton, la segunda instanacia del servicio, la url no la tomar铆a.

Tambi茅n se puede capturar el resultado de una promesa de este modo, para no hacer la funci贸n auto-invocada:

const url1 = "https://api.escuelajs.co/api/v1/products";

const productService = new BaseHttpService<Product>(url1);

productService.getAll().then(console.log);

Mi aporte:

import axios from 'axios';
import { Category } from '../models/category.model';
import { Product } from '../models/product.model';


export class BaseHttpService<TypeClass> {
  // data: TypeClass[] = [];
  constructor (private url: string) {}

  async getAll(): Promise<TypeClass[]> {
    const { data } = await axios.get<TypeClass[]>(this.url);
    return data;
  }

}

(async () => {
  const URL_PRODUCTS = 'https://api.escuelajs.co/api/v1/products'
  const URL_CATEGORIES = 'https://api.escuelajs.co/api/v1/categories'
  
  const productService = new BaseHttpService<Product>(URL_PRODUCTS);
  const categoryService = new BaseHttpService<Category>(URL_CATEGORIES);
  
  const products = await productService.getAll()
  const categories = await categoryService.getAll()

  
  console.log('products: >>>> ', products.length);
  console.log('categories: >>>> ', categories.length);
})()

Generics en clases

import axios from "axios";

import { Category } from "./models/category.model";
import { Product } from "./models/product.model";

export class BaseHttpService<TypeClass> {
  constructor(
    private url: string,
  ) { }

  async getAll() {
    const { data } = await axios.get<TypeClass[]>(this.url)
    return data;
  }
}

(async()=> {
  const url1 = 'https://api.escuelajs.co/api/v1/products'

  const productService = new BaseHttpService<Product>(url1)
  const rta = await productService.getAll()
  console.log('products: ', rta.length)

  const url2 = 'https://api.escuelajs.co/api/v1/categories'
  const categoryService = new BaseHttpService<Category>(url2)
  const rta2 = await categoryService.getAll()
  console.log('categories: ', rta2.length)
})()