Pase un parámetro de objeto estilo diccionario que implemente propiedades T a la clase .
Estoy utilizando la herencia para inicializar las propiedades de la clase class<T>
con un objeto Object
que implementa todas las propiedades de T
dentro de {...}
pasado al constructor
export default abstract class DatabaseObjectModel<T> extends JSONModel<T> {
constructor(json: T) {
super();
this.fromJSON(json);
}
}
export default abstract class JSONModel<T> extends ModelValidation {
// abstract toJSON(): Object;
// abstract fromJSON(json: Object): T;
toJSON() {
// toJSON predeterminado
return JSON.parse(JSON.stringify(this));
}
fromJSON(json: Object) {
// Para cada clave de json, asignar el valor a this.key
for (let key in json) {
this[key] = json[key];
}
}
}
El problema es que, cuando inicializo las clases heredadas de DatabaseObjectModel
de esta manera:
new ImplementingDatabaseObjectModel({
id: randomUUID(),
name: "MASTER",
permissions: [],
assignedRoles: undefined,
})
Obtengo el siguiente error:
Argument of type '{...}' is not assignable to parameter of type 'ImplementingDatabaseObjectModel
¿Cómo puedo modificar el constructor
de DatabaseObjectModel<T>
para que acepte un objeto que implementa todas las propiedades de T
, pero no su instancia?
davy.ai
Para modificar el constructor de
DatabaseObjectModel<t>
para que acepte unObject
que implemente todas las propiedades detype T
pero no su instancia, puede agregar una restricción de tipo al parámetro del constructor.Al agregar
T extends object
como una restricción de tipo, se garantiza que el parámetrojson
que se pasa al constructor sea un objeto. Esto permite pasar un objeto como argumento que implemente todas las propiedades detype T
sin instanciarlo.Con esta modificación, debería poder inicializar clases heredadas de
DatabaseObjectModel
de la siguiente manera:new ImplementingDatabaseObjectModel({
id: randomUUID(),
name: "MASTER",
permissions: [],
assignedRoles: undefined,
})