¿Cómo puedo difundir las propiedades de una clase al superconstructor de los padres?
ActionLog es una clase base, se instancia en un método dentro de ActionRequestAccess
ActionRequestAccess.ts
export class ActionRequestAccess extends ActionLog { constructor(public actionLog: ActionLog, public customerId: string) { super( actionLog.id, // Want to get rid of these assignments <<< and switch to something like: ...actionLog actionLog.type, actionLog.date, actionLog.address, actionLog.location ); } static override fromMap(map: any) { if (!map) { return null; } const baseMap = super.fromMap(map); if (!baseMap) { return null; } return new ActionRequestAccess(baseMap, map['customerId'] ?? null); } }
ActionLog.ts
import { ActionType } from '../../enums'; export class ActionLog { constructor( public id: string, public type: ActionType, public date: Date, public address: string, public location: string ) {} static fromMap(map: any) { if (!map) { return null; } return new ActionLog( map['id'] ?? null, map['type'] ?? null, map['date'] ?? null, map['address'] ?? null, map['location'] ?? null ); } }
Puede usar Object.values
en el objeto dentro ActionRequestAccess
.
constructor(public actionLog: ActionLog, public customerId: string) { super(...Object.values(actionLog)); }
Pero esto significa que el orden en que se pasan los valores de su objeto a la función es importante, por lo que este patrón es un poco inseguro. esto funcionará
const myObject = new ActionRequestAccess({ id: 1, type: 'myType', date: 'myDate', adress: 'myAdress', location: 'myLocation', });
pero esto cambiará la posición de la identificación y el tipo y no funcionará.
const myObject = new ActionRequestAccess({ type: 'myType', id: 1, date: 'myDate', adress: 'myAdress', location: 'myLocation', });
Si puede cambiar el valor esperado al constructor de ActionLog
para que sea un objeto en lugar de parámetros, probablemente será más fácil y más seguro.