import { zTag } from '../internal/zTag.js'; type PropExtension

= ( value: P extends keyof T ? T[P] : never, ) => (o: T) => boolean; type PropExtensionW

= ( value: P extends keyof T ? unknown : never, ) => (o: T) => boolean; type PropExtensions

= { /** * Returns `true` if the value of the property satisfies the predicate. * @param pred The predicate to satisfy. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').satisfies((value) => value === 1)); // => [{ a: 1, b: 2 }] * ``` */ satisfies: ( pred: P extends keyof O ? (value: O[P]) => boolean : never, ) => (o: O) => boolean; /** * Returns `true` if the value of the property is equal to the specified value (using `===`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').eq(1)); // => [{ a: 1, b: 2 }] * ``` */ eq: PropExtension

; /** * Returns `true` if the value of the property is equal to the specified value (using `===`). * * It is the same as `eq` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').eqW(1)); // => [{ a: 1, b: 2 }] * ``` */ eqW: PropExtensionW

; /** * Returns `true` if the value of the property is not equal to the specified value (using `!==`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').notEq(1)); // => [{ a: 3, b: 4 }] * ``` */ notEq: PropExtension

; /** * Returns `true` if the value of the property is not equal to the specified value (using `!==`). * * It is the same as `notEq` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').notEqW(1)); // => [{ a: 3, b: 4 }] * ``` */ notEqW: PropExtensionW

; /** * Returns `true` if the value of the property is loosely equal to the specified value (using `==`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: '1', b: 4 }]; * objs.filter(prop('a').looselyEq(1)); // => [{ a: 1, b: 2 }, { a: '1', b: 4 }] * ``` */ looselyEq: PropExtension

; /** * Returns `true` if the value of the property is loosely equal to the specified value (using `==`). * * It is the same as `looselyEq` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: '1', b: 4 }]; * objs.filter(prop('a').looselyEqW(1)); // => [{ a: 1, b: 2 }, { a: '1', b: 4 }] * ``` */ looselyEqW: PropExtensionW

; /** * Returns `true` if the value of the property is not loosely equal to the specified value (using `!=`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: '1', b: 4 }]; * objs.filter(prop('a').notLooselyEq(1)); // => [] * ``` */ notLooselyEq: PropExtension

; /** * Returns `true` if the value of the property is not loosely equal to the specified value (using `!=`). * * It is the same as `notLooselyEq` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: '1', b: 4 }]; * objs.filter(prop('a').notLooselyEqW(1)); // => [] * ``` */ notLooselyEqW: PropExtensionW

; /** * Returns `true` if the value of the property is equal to the specified value (using `equals`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: { b: 1 }, c: 2 }, { a: { b: 3 }, c: 4 }]; * objs.filter(prop('a').equals({ b: 1 })); // => [{ a: { b: 1 }, c: 2 }] * ``` * * @see {@link equals} */ equals: PropExtension

; /** * Returns `true` if the value of the property is equal to the specified value (using `equals`). * * It is the same as `equals` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: { b: 1 }, c: 2 }, { a: { b: 3 }, c: 4 }]; * objs.filter(prop('a').equalsW({ b: 1 })); // => [{ a: { b: 1 }, c: 2 }] * ``` * * @see {@link equals} */ equalsW: PropExtensionW

; /** * Returns `true` if the value of the property is not equal to the specified value (using `equals`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: { b: 1 }, c: 2 }, { a: { b: 3 }, c: 4 }]; * objs.filter(prop('a').notEquals({ b: 1 })); // => [{ a: { b: 3 }, c: 4 }] * ``` * * @see {@link equals} */ notEquals: PropExtension

; /** * Returns `true` if the value of the property is not equal to the specified value (using `equals`). * * It is the same as `notEquals` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: { b: 1 }, c: 2 }, { a: { b: 3 }, c: 4 }]; * objs.filter(prop('a').notEqualsW({ b: 1 })); // => [{ a: { b: 3 }, c: 4 }] * ``` * * @see {@link equals} */ notEqualsW: PropExtensionW

; /** * Returns `true` if the value of the property is the same as the specified value (using `is`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 0, c: 2 }, { a: -0, c: 4 }]; * objs.filter(prop('a').is(-0)); // => [{ a: -0, c: 4 }] * ``` * * @see {@link is} */ is: PropExtension

; /** * Returns `true` if the value of the property is the same as the specified value (using `is`). * * It is the same as `is` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 0, c: 2 }, { a: -0, c: 4 }]; * objs.filter(prop('a').isW(-0)); // => [{ a: -0, c: 4 }] * ``` * * @see {@link is} */ isW: PropExtensionW

; /** * Returns `true` if the value of the property is not the same as the specified value (using `is`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 0, c: 2 }, { a: -0, c: 4 }]; * objs.filter(prop('a').isNot(-0)); // => [{ a: 0, c: 2 }] * ``` * * @see {@link is} */ isNot: PropExtension

; /** * Returns `true` if the value of the property is not the same as the specified value (using `is`). * * It is the same as `isNot` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 0, c: 2 }, { a: -0, c: 4 }]; * objs.filter(prop('a').isNotW(-0)); // => [{ a: 0, c: 2 }] * ``` * * @see {@link is} */ isNotW: PropExtensionW

; /** * Returns `true` if the value of the property is greater than the specified value (using `>`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').gt(1)); // => [{ a: 3, b: 4 }] * ``` */ gt: PropExtension

; /** * Returns `true` if the value of the property is greater than the specified value (using `>`). * * It is the same as `gt` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').gtW(1)); // => [{ a: 3, b: 4 }] * ``` */ gtW: PropExtensionW

; /** * Returns `true` if the value of the property is greater than or equal to the specified value (using `>=`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').gte(1)); // => [{ a: 1, b: 2 }, { a: 3, b: 4 }] * ``` */ gte: PropExtension

; /** * Returns `true` if the value of the property is greater than or equal to the specified value (using `>=`). * * It is the same as `gte` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').gteW(1)); // => [{ a: 1, b: 2 }, { a: 3, b: 4 }] * ``` */ gteW: PropExtensionW

; /** * Returns `true` if the value of the property is less than the specified value (using `<`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').lt(3)); // => [{ a: 1, b: 2 }] * ``` */ lt: PropExtension

; /** * Returns `true` if the value of the property is less than the specified value (using `<`). * * It is the same as `lt` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').ltW(3)); // => [{ a: 1, b: 2 }] * ``` */ ltW: PropExtensionW

; /** * Returns `true` if the value of the property is less than or equal to the specified value (using `<=`). * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').lte(3)); // => [{ a: 1, b: 2 }, { a: 3, b: 4 }] * ``` */ lte: PropExtension

; /** * Returns `true` if the value of the property is less than or equal to the specified value (using `<=`). * * It is the same as `lte` but the value is not checked at compile time. * The `W` postfix stands for "wide". * @param value The value to compare to. * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').lteW(3)); // => [{ a: 1, b: 2 }, { a: 3, b: 4 }] * ``` */ lteW: PropExtensionW

; }; /** * Returns a function that when given an object returns the value of the specified property. * * The function also has a number of extensions that can be used to compare the value of the property. * @param prop The property to get. * * @example * ```typescript * const obj = { a: 1, b: 2 }; * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.map(prop('a')); // => [1, 3] * prop('a')(obj); // => 1 * ``` * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').eq(1)); // => [{ a: 1, b: 2 }] * ``` */ export type PropFn< T = any, P extends unknown extends T ? PropertyKey : keyof T = any, > = ((o: T) => P extends keyof T ? T[P] : undefined) & PropExtensions

& { [zTag]: 'Prop'; }; /** * Returns a function that when given an object returns the value of the specified property. * * The function also has a number of extensions that can be used to compare the value of the property. * @param prop The property to get. * * @example * ```typescript * const obj = { a: 1, b: 2 }; * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.map(prop('a')); // => [1, 3] * prop('a')(obj); // => 1 * ``` * * @example * ```typescript * const objs = [{ a: 1, b: 2 }, { a: 3, b: 4 }]; * objs.filter(prop('a').eq(1)); // => [{ a: 1, b: 2 }] * ``` */ declare const prop: < const T, P extends object extends T ? PropertyKey : keyof T, >( prop: P, ) => PropFn; export default prop; //# sourceMappingURL=prop.d.ts.map