особенно если число параметров растет

седневной жизни мне нужно прочитать некоторые json из ajax и привести их к какому-либо типизированному объекту (включая его МЕТОДЫ). В интернете я нашел и использую следующий код для приведения типов:

export class Obj 
{
    public static cast<T>(obj, type: { new(...args): T} ): T 
    {
        obj.__proto__ = type.prototype;
        return obj;
    }
}

В качестве примера это можно использовать следующим образом:

let objFromJson = { id: 666, name: "love" };
let building: Building = null; 
building = Obj.cast(objFromJson, Building);

// On this point constructor for Building is not call - this is
// correct because we not create object but only make type casting

building.test('xx');

// on this point on console we should get:
// > "building.test a:xx, name:love"

// so object 'building' indeed have methods of Building Class

где (пример от 'головы')

export class Building {

    constructor(
        public id: number,
        public name: string,
    ) {
        console.log('building.constructor: id:' + id + ', name' + name);
    }

    public test(a) {
        console.log('building.test a:' + a + ', name:' + this.name);
    }

}

Дополнительная информация: вместо использованияcast<T>(obj, type: { new(...args): T} ): T мы можем использовать толькоcast<T>(obj, type): T но я читал, что вторая версия вызовет проблемы с функциями стрелок (https://stackoverflow.com/a/32186367/860099) - не понимаю почему -?

Вопросов: Я не очень понимаю, как работает метод Obj.cast (и, например, как я могу использовать...args на вызов) - кто-нибудь может это объяснить? Кто-нибудь знает альтернативную функцию, но не для приведения, а для объекта CREATE (чтобы вызвать конструктор) формировать данные JSON аналогичным удобным способом (например,building = Obj.create(objFromJson, Building);

Ответы на вопрос(1)

Ваш ответ на вопрос