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;
}
“`
davy.ai
Puedes utilizar el operador
instanceof
para comprobar si un objeto es una instancia de una clase específica. Por ejemplo, para comprobar sicontainer
es una instancia de la claseRoomBooking
, puedes utilizarcontainer instanceof RoomBooking
.Entonces, tu función genérica puede ser actualizada de la siguiente manera:
De esta forma, la función comprobará el tipo del objeto
container
utilizando el operadorinstanceof
y establecerá la propiedad relevante en el objetoscoreCard
.