¿Forma limpia de asignar objetos a otros objetos?

¿Hay una buena manera de asignar objetos a otros objetos? Las recomendaciones de la biblioteca también son bienvenidas.

Por ejemplo, digamos que tengo estas clases:

export class Draft {
    id: number;
    name: string;
    summary: string;
}

export class Book {
    id: number;
    name: string;
    info: Info;
}

export class Info {
    value: string;
}

Tradicionalmente, para asignar campos deDraft aBook Tendría que hacerlo manualmente para cada campo:

export class Book {
    [...]

    fromDraft(Draft draft) {
        this.id = draft.id;
        this.name = draft.name;
        this.info = new Info();
        this.info.value = draft.summary;
    }
}

¿Hay una manera más fácil de asignar campos de objetos que se denominan de la misma manera? Por ejemploDraft yBook'sid yname campos, al tiempo que también puede definir asignaciones personalizadas, como desdedraft.summary abook.info.value.

Tenga en cuenta que esto está lejos de mi caso de uso real. Aquí no es tan malo hacer asignaciones manualmente, pero para los objetos con muchos campos con nombres similares es una tarea difícil.

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta