detachEvent(sType, fnFunction) {
			assert(typeof (sType) === "string" && sType, "Eventing.detachEvent: sType must be a non-empty string" );
			assert(typeof (fnFunction) === "function", "Eventing.detachEvent: fnFunction must be a function");

			const aEventListeners = this.#mEventRegistry[sType];
			if ( !Array.isArray(aEventListeners) ) {
				return;
			}

			let oFound;

			for (let i = 0, iL = aEventListeners.length; i < iL; i++) {
				if (aEventListeners[i].fnFunction === fnFunction) {
					oFound = aEventListeners[i];
					aEventListeners.splice(i,1);
					break;
				}
			}
			// If no listener was found, look for original listeners of attachEventOnce
			if (!oFound) {
				for (let i = 0, iL = aEventListeners.length; i < iL; i++) {
					const oOriginal = aEventListeners[i].fnFunction.oOriginal;
					if (oOriginal && oOriginal.fnFunction === fnFunction) {
						aEventListeners.splice(i,1);
						break;
					}
				}
			}
			// If we just deleted the last registered EventHandler, remove the whole entry from our map.
			if (aEventListeners.length == 0) {
				delete this.#mEventRegistry[sType];
			}
		}
Removes a previously attached event handler from the event with the given identifier.

The passed parameters must match those used for registration with {@link #attachEvent} beforehand.

@param {string}
           sType The type of the event to detach from
@param {function}
           fnFunction The handler function to detach from the event
@since 1.120.0
@private
@ui5-restricted sap.ui.core sap/base/i18n