function extractKeys(mKeys, mCurrent, sCurrentKey) {
		Object.keys(mCurrent).forEach(function(sProperty) {
			const sKey = sCurrentKey ? sCurrentKey + "." + sProperty : sProperty;

			if ("arguments" in mCurrent[sProperty]) {
				aForbiddenTypes.forEach(function(sForbiddenType) {
					if (mCurrent[sProperty].arguments.includes(sForbiddenType)) {
						throw new Error("Forbidden type found in metadata of hook " + sCurrentKey + ": " + sForbiddenType);
					}
				});

				mKeys[sProperty] = sKey;
				mHookMetadataByKey[sKey] = mCurrent[sProperty];
			} else {
				mKeys[sProperty] = {};
				extractKeys(mKeys[sProperty], mCurrent[sProperty], sKey);
			}
		});

		return mKeys;
	}
Deregisters from a hook of a table.
If there are multiple registrations with the same <code>fnHandler</code> and <code>oThis</code>, one deregistration per
registration is required. The last registration is removed first.

@param {sap.ui.table.Table} oScope The table from whose hook to deregister from.
@param {string} sKey The hook to deregister from.
@param {Function} fnHandler The handler of the hook.
@param {Object} [oThis] The context of hook handler calls.