ts-flex-query
Version:
Flexible and type-safe data queries
8 lines (7 loc) • 853 B
TypeScript
import { Expression } from '../core/expression';
import { PipeOperator } from '../core/pipe-operator';
import { IfPrimitive } from '../types/utils';
export type ObjectValueSelector<T = any> = (keyof T & string) | ((obj: Expression<T>) => Expression) | PipeOperator<T>;
export type ObjectValueSelectorType<TObj, TSelector extends ObjectValueSelector> = TSelector extends keyof TObj ? TObj[TSelector] : TSelector extends PipeOperator<TObj, infer TOut> ? TOut : TSelector extends ((obj: Expression<any>) => Expression<infer TResult>) ? TResult : never;
export type PrimitiveObjectValueSelector<TObj, TSelector extends ObjectValueSelector> = IfPrimitive<ObjectValueSelectorType<TObj, TSelector>, TSelector, [TObj, 'Selected value must be primitve.']>;
export declare function createQueryFromObjectValueSelector(selector: ObjectValueSelector): PipeOperator;