import { DataProvider, DataFilter } from '@oracle/oraclejet/ojdataprovider';
import { OjWebElement } from '../elements';
type FilterFlags = {
[Key in keyof Base]: Base[Key] extends Condition ? Key : never;
};
type AllowedNames = FilterFlags[keyof Base];
type SubType = Pick>;
/**
* Get the key for the record filtered by filterDef. If exactly one record is
* found after filtering is applied, the key of that record is returned.
* An error is thrown if, after filtering:
* - no records are found
* - more than one record is found
* If the property identified by dataProviderProp doesn't exist or is not a DataProvider,
* an error will be also thrown.
* @typeParam E - Custom element type
* @typeParam K - Type of key value
* @typeParam DataProviderProps - Type representing DataProvider-valued properties of the custom element type
* @param el The OjWebElement whose properties reference the DataProvider
* @param dataProviderProp The property name within the element identifying the DataProvider
* @param filterDef A [FilterDef](https://www.oracle.com/webfolder/technetwork/jet/jsdocs/DataFilter.html#FilterDef)
* used to locate the record within the DataProvider
* @return {K} The key of the matching record
*
* #### Example Usage
* Fetch a key from a SelectSingle DataProvider by filtering for a DepartmentName
* ```javascript
* import { fetchKeyByFilter } from '@oracle/oraclejet-webdriver';
* import { ojSelectSingle as JetSelectSingle } from '@oracle/oraclejet/ojselectsingle';
* const ss1 = await ojSelectSingle(driver, By.id('department-select'));
* const key = fetchKeyByFilter,string>(ss1, 'data', {
* op: '$eq',
* value: { DepartmentName: 'Finance' }
* });
* await ss1.changeValue(key);
* ```
*/
export declare function fetchKeyByFilter>>(el: OjWebElement, dataProviderProp: DataProviderProps, filterDef: DataFilter.FilterDef): Promise;
export {};