_handleTypeAhead(ev, { setAsChecked }) {
      const { key, code } = ev;

      if (code.startsWith('Key') || code.startsWith('Digit') || code.startsWith('Numpad')) {
        ev.preventDefault();
        this.__typedChars.push(key);
        const chars = this.__typedChars.join('');
        const matchedItemIndex =
          // TODO: consider making this condition overridable for Subclassers by extracting it into protected method
          this.formElements.findIndex(el => el.modelValue.value.toLowerCase().startsWith(chars));
        if (matchedItemIndex >= 0) {
          if (setAsChecked) {
            this.setCheckedIndex(matchedItemIndex);
          }
          this.activeIndex = matchedItemIndex;
        }
        if (this.__pendingTypeAheadTimeout) {
          // Prevent that pending timeouts 'intersect' with new 'typeahead sessions'
          // @ts-ignore
          window.clearTimeout(this.__pendingTypeAheadTimeout);
        }
        this.__pendingTypeAheadTimeout = setTimeout(() => {
          // schedule a timeout to reset __typedChars
          this.__typedChars = [];
        }, this._typeAheadTimeout);
      }
    }
@param {KeyboardEvent} ev
@param {{setAsChecked:boolean}} options
@protected