"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deserializeWith = deserializeWith; const options_1 = require("../options"); const generic_1 = require("./generic"); function deserializeWith(deserializer, into, options) { const visitor = new generic_1.GenericVisitor(); const obj = deserializer.deserializeObject(visitor); const target = new into(); const newObject = {}; for (const property in target) { const name = options.getPropertyName(property, options_1.Stage.Deserialize); const value = obj[name] || options.getDefault(property); newObject[property] = value; delete obj[name]; } if (options.options.denyUnknownFields && Object.keys(obj).length > 0) { throw new TypeError(`Unexpected fields: ${Object.keys(obj).join(', ')}`); } return Object.assign(target, newObject); }