es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Implementar una función genérica en un componente de Angular

Estoy intentando usar una función genérica en lugar de 3 funciones en mi componente de Angular, estas funciones realizan la misma tarea, actualizar los valores de una propiedad en el mismo objeto. Mis funciones originales son:

    updateRoomPayload(container: RoomBooking) {
        this.scoreCard.room_booking = container;
    }

    updateUpsellingPayload(container: Upsellings) {
        this.scoreCard.p_upselling = container;
    }

    updateCateringPayload(container: Catering) {
        this.scoreCard.p_catering = container;
    }

Estoy obteniendo la actualización desde la salida de un componente hijo de esta forma:

    <app-rooms [optionslists]="catalogue" (roompayload)="updateRoomPayload($event)"></app-rooms>

Mi función genérica es:

    updatePayload<t>(container: T) {
        switch ((typeof container).toString()) {
            case 'RoomBooking':
                this.scoreCard.room_booking = container;
                break;

            case 'Upsellings':
                this.scoreCard.p_upselling = container;
                break;

            case 'Catering':
                this.scoreCard.p_catering = container;
                break;

            default:
                break;
        }
    }

Pero encontré que (typeof container).toString() solo me da el tipo de esta variable como objeto, pero no puedo verificar si es una instancia de un objeto específico. ¿Cómo puedo obtener el tipo del objeto?

Mis interfaces son:

“`typescript
export interface RoomBooking {
room_type?: optionScore[];
nights?: scoreRanges[];
advance_booking?: scoreRanges[];
contrated_price_n?: scoreRanges[];
cancellation_policy?: optionScore[];
meal_plan?: optionScore[];
}

export interface Upsellings {
service_type?: optionScore[];
n_upselling_bought?: scoreRanges[];
n_cross_upselling_bought?: scoreRanges[];
amount_upselling?: scoreRanges[];
}

export interface Catering {
product_category?: optionScore[];
avg_time?: scoreRanges[];
advance_booking?: scoreRanges[];
}

export interface Scorecard {
_id?: string;
create_at?: string;
update_at?: string;
p_recurrence?: scoreRanges[];
room_booking?: RoomBooking;
p_upselling?: Upsellings;
p_catering?: Catering;
}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar el operador instanceof para comprobar si un objeto es una instancia de una clase específica. Por ejemplo, para comprobar si container es una instancia de la clase RoomBooking, puedes utilizar container instanceof RoomBooking.

    Entonces, tu función genérica puede ser actualizada de la siguiente manera:

    updatePayload<t>(container: T) {
      if (container instanceof RoomBooking) {
        this.scoreCard.room_booking = container;
      } else if (container instanceof Upsellings) {
        this.scoreCard.p_upselling = container;
      } else if (container instanceof Catering) {
        this.scoreCard.p_catering = container;
      }
    }
    

    De esta forma, la función comprobará el tipo del objeto container utilizando el operador instanceof y establecerá la propiedad relevante en el objeto scoreCard.

Comments are closed.