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
text/typescript
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;