UNPKG

react-querybuilder

Version:

React Query Builder component for constructing queries and filters, with utilities for executing them in various database and evaluation contexts

204 lines (148 loc) 4.59 kB
import type { IsFloat } from "./is-float.mjs"; import type { IsInteger } from "./is-integer.mjs"; /** @group type-fest */ export type Numeric = number | bigint; /** @group type-fest */ export type Zero = 0 | 0n; /** Matches the hidden `Infinity` type. Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/32277) if you want to have this type as a built-in in TypeScript. @see NegativeInfinity @group type-fest */ export type PositiveInfinity = 1e999; /** Matches the hidden `-Infinity` type. Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/32277) if you want to have this type as a built-in in TypeScript. @see PositiveInfinity @group type-fest */ export type NegativeInfinity = -1e999; /** A finite `number`. You can't pass a `bigint` as they are already guaranteed to be finite. Use-case: Validating and documenting parameters. Note: This can't detect `NaN`, please upvote [this issue](https://github.com/microsoft/TypeScript/issues/28682) if you want to have this type as a built-in in TypeScript. @example ``` import type {Finite} from 'type-fest'; declare function setScore<T extends number>(length: Finite<T>): void; ``` @group type-fest */ export type Finite<T extends number> = T extends PositiveInfinity | NegativeInfinity ? never : T; /** A `number` that is an integer. Use-case: Validating and documenting parameters. @example ``` type Integer = Integer<1>; //=> 1 type IntegerWithDecimal = Integer<1.0>; //=> 1 type NegativeInteger = Integer<-1>; //=> -1 type Float = Integer<1.5>; //=> never // Supports non-decimal numbers type OctalInteger: Integer<0o10>; //=> 0o10 type BinaryInteger: Integer<0b10>; //=> 0b10 type HexadecimalInteger: Integer<0x10>; //=> 0x10 ``` @example ``` import type {Integer} from 'type-fest'; declare function setYear<T extends number>(length: Integer<T>): void; ``` @see NegativeInteger @see NonNegativeInteger @group type-fest */ export type Integer<T> = T extends unknown ? IsInteger<T> extends true ? T : never : never; /** A `number` that is not an integer. Use-case: Validating and documenting parameters. It does not accept `Infinity`. @example ``` import type {Float} from 'type-fest'; declare function setPercentage<T extends number>(length: Float<T>): void; ``` @see Integer @group type-fest */ export type Float<T> = T extends unknown ? IsFloat<T> extends true ? T : never : never; /** A negative (`-∞ < x < 0`) `number` that is not an integer. Equivalent to `Negative<Float<T>>`. Use-case: Validating and documenting parameters. @see Negative @see Float @group type-fest */ export type NegativeFloat<T extends number> = Negative<Float<T>>; /** A negative `number`/`bigint` (`-∞ < x < 0`) Use-case: Validating and documenting parameters. @see NegativeInteger @see NonNegative @group type-fest */ export type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never; /** A negative (`-∞ < x < 0`) `number` that is an integer. Equivalent to `Negative<Integer<T>>`. You can't pass a `bigint` as they are already guaranteed to be integers, instead use `Negative<T>`. Use-case: Validating and documenting parameters. @see Negative @see Integer @group type-fest */ export type NegativeInteger<T extends number> = Negative<Integer<T>>; /** A non-negative `number`/`bigint` (`0 <= x < ∞`). Use-case: Validating and documenting parameters. @see NonNegativeInteger @see Negative @example ``` import type {NonNegative} from 'type-fest'; declare function setLength<T extends number>(length: NonNegative<T>): void; ``` @group type-fest */ export type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : never; /** A non-negative (`0 <= x < ∞`) `number` that is an integer. Equivalent to `NonNegative<Integer<T>>`. You can't pass a `bigint` as they are already guaranteed to be integers, instead use `NonNegative<T>`. Use-case: Validating and documenting parameters. @see NonNegative @see Integer @example ``` import type {NonNegativeInteger} from 'type-fest'; declare function setLength<T extends number>(length: NonNegativeInteger<T>): void; ``` @group type-fest */ export type NonNegativeInteger<T extends number> = NonNegative<Integer<T>>; /** Returns a boolean for whether the given number is a negative number. @see Negative @example ``` import type {IsNegative} from 'type-fest'; type ShouldBeFalse = IsNegative<1>; type ShouldBeTrue = IsNegative<-1>; ``` @group type-fest */ export type IsNegative<T extends Numeric> = T extends Negative<T> ? true : false;