UNPKG

@monstermann/fn

Version:

A utility library for TypeScript.

34 lines (33 loc) 1.45 kB
import { AllUnionFields, Simplify } from "type-fest"; //#region src/object/test.d.ts type Test<T extends object, U, V> = T extends unknown ? U extends keyof T ? V extends T[U] ? Simplify<T & Record<U, V>> : never : never : never; /** * `test(target, key, predicate)` * * Checks if the `key` property of `target` object passes the `predicate` function test. * * ```ts * test({ a: 5, b: 2 }, "a", (x) => x > 3); // true * test({ a: 1, b: 2 }, "a", (x) => x > 3); // false * ``` * * ```ts * pipe( * { a: 5, b: 2 }, * test("a", (x) => x > 3), * ); // true * * pipe( * { a: 1, b: 2 }, * test("a", (x) => x > 3), * ); // false * ``` */ declare const test: { <T extends object, U extends keyof AllUnionFields<T>, V extends AllUnionFields<T>[U]>(key: U, predicate: (value: AllUnionFields<T>[U]) => value is V): (target: T) => target is Test<T, U, V>; <T extends object, U extends keyof AllUnionFields<T>>(key: U, predicate: (value: AllUnionFields<T>[U]) => boolean): (target: T) => target is Test<T, U, AllUnionFields<T>[U]>; <T extends object, U extends keyof AllUnionFields<T>, V extends AllUnionFields<T>[U]>(target: T, key: U, predicate: (value: AllUnionFields<T>[U]) => value is V): target is Test<T, U, V>; <T extends object, U extends keyof AllUnionFields<T>>(target: T, key: U, predicate: (value: AllUnionFields<T>[U]) => boolean): target is Test<T, U, AllUnionFields<T>[U]>; }; //#endregion export { test };