negate()
negate<
Args>(predicate): (...args) =>boolean
Creates a function that negates the result of the predicate.
Type Parameters
Args: Args extends unknown[]
The argument types of the predicate.
Parameters
predicate: (...args) => unknown
The predicate to negate.
Returns
The new negated function.
Since
2.0.0
Also known as
complement (Ramda) · negate (Lodash, es-toolkit) · not (Effect) · ❌ (Remeda, Radashi, Modern Dash, Antfu)
Example
const isEven = (n: number) => n % 2 === 0;
const isOdd = negate(isEven);
isOdd(1); // => true
isOdd(2); // => false
// Use with array methods
[1, 2, 3, 4, 5].filter(negate(isEven));
// => [1, 3, 5]
// With multiple arguments
const includes = (arr: number[], val: number) => arr.includes(val);
const excludes = negate(includes);
excludes([1, 2, 3], 4); // => true
How it works?
Creates a function that returns the logical negation of the predicate result.
Transformation
Array Filter Example
Use Cases
Filter Inversion for array operations 📌
Invert predicates for filtering operations. Essential for creating opposite filter conditions.
import { negate } from "pithos/arkhe/function/negate";
const isEven = (n: number) => n % 2 === 0;
const isOdd = negate(isEven);
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(numbers.filter(isEven)); // [2, 4, 6, 8, 10]
console.log(numbers.filter(isOdd)); // [1, 3, 5, 7, 9]
Validation Negation for form checks 📌
Create opposite validation conditions. Critical for form validation logic.
import { negate } from "pithos/arkhe/function/negate";
const isEmpty = (value: string) => value.trim().length === 0;
const isNotEmpty = negate(isEmpty);
const hasErrors = (errors: string[]) => errors.length > 0;
const isValid = negate(hasErrors);
// Use in form validation
const formFields = ["username", "email", "password"];
const values = { username: "john", email: "", password: "secret" };
const emptyFields = formFields.filter(field => isEmpty(values[field]));
const filledFields = formFields.filter(field => isNotEmpty(values[field]));
console.log(emptyFields); // ["email"]
console.log(filledFields); // ["username", "password"]
Access Control logic
Invert permission checks for access control. Important for authorization systems.
import { negate } from "pithos/arkhe/function/negate";
interface User {
id: string;
role: string;
suspended: boolean;
}
const isAdmin = (user: User) => user.role === "admin";
const isSuspended = (user: User) => user.suspended;
const isNotAdmin = negate(isAdmin);
const isActive = negate(isSuspended);
const users: User[] = [
{ id: "1", role: "admin", suspended: false },
{ id: "2", role: "user", suspended: true },
{ id: "3", role: "user", suspended: false },
];
// Find active non-admin users
const regularActiveUsers = users.filter(u => isNotAdmin(u) && isActive(u));
console.log(regularActiveUsers); // [{ id: "3", role: "user", suspended: false }]