UNPKG

type-plus

Version:
77 lines 2.45 kB
import type { IsNever, NeverType } from '../never/never_type.js'; /** * 🌪️ *filter* * * Filter `T` to ensure it is a tuple, excluding array. * * @typeParam Cases['never'] Return type when `T` is `never`. Default to `Else`. * * @example * ```ts * type R = TupleType<[]> // [] * type R = TupleType<[1]> // [1] * * type R = TupleType<number[]> // never * type R = TupleType<string> // never * type R = TupleType<never> // never * type R = TupleType<unknown> // never * ``` */ export type TupleType<T, Then = T, Else = never, Options extends TupleType.Options = TupleType.DefaultOptions<Else>> = IsNever<T, Options['caseNever'], [ T ] extends [any[]] ? (number extends T['length'] ? Else : Then) : Else>; export declare namespace TupleType { interface Options extends NeverType.Options { } interface DefaultOptions<Else> { caseNever: Else; } } /** * 🎭 *validate* * * Validate that `T` is a tuple, excluding array. * * ```ts * type R = IsTuple<[]> // true * * type R = IsTuple<number[]> // false * type R = IsTuple<string> // false * type R = IsTuple<never> // false * type R = IsTuple<unknown> // false * ``` */ export type IsTuple<T, Then = true, Else = false, Options extends TupleType.Options = TupleType.DefaultOptions<Else>> = TupleType<T, Then, Else, Options>; /** * 🌪️ *filter* * * Filter `T` to ensure it is not an tuple, excluding array. * * ```ts * type R = NotTupleType<[]> // never * type R = NotTupleType<[1]> // never * * type R = NotTupleType<number[]> // number[] * type R = NotTupleType<string> // string * type R = NotTupleType<never> // never * type R = NotTupleType<unknown> // unknown * ``` */ export type NotTupleType<T, Then = T, Else = never, Options extends TupleType.Options = TupleType.DefaultOptions<Then>> = TupleType<T, Else, Then, Options>; /** * 🎭 *validate* * * Validate that `T` is not a tuple, excluding array. * * ```ts * type R = IsNotTuple<[]> // false * type R = IsNotTuple<[1]> // false * * type R = IsNotTuple<number[]> // true * type R = IsNotTuple<string> // true * type R = IsNotTuple<never> // true * type R = IsNotTuple<unknown> // true * ``` */ export type IsNotTuple<T, Then = true, Else = false, Options extends TupleType.Options = TupleType.DefaultOptions<Then>> = TupleType<T, Else, Then, Options>; //# sourceMappingURL=tuple_type.d.ts.map