mapObject = (obj, fn) => {
	const newObj = Object.create(null);
	for (const key of Object.keys(obj)) {
		newObj[key] = fn(
			obj[/** @type {keyof T} */ (key)],
			/** @type {keyof T} */ (key)
		);
	}
	return newObj;
}
@template {object} T
@template {object} R
@param {T} obj object to be mapped
@param {function(T[keyof T], keyof T): R} fn mapping function
@returns {MappedValues<T, R>} mapped object