The prototype of the class can be dynamically affected to the object:
function cast<T>(obj: any, cl: { new(...args): T }): T {
obj.__proto__ = cl.prototype;
return obj;
}
var john = cast(/* somejson */, Person);
See the documentation of __proto__
here.