import { And } from "./and"; import { IsGreaterOrEqual } from "./greater-than"; import { IsNever } from "./never"; import { Not } from "./not"; import { IsInteger, ParseNumber } from "./number"; /** * Returns a boolean whether the passed argument is a valid array index * @example * ```ts * // true * type Case1 = IsArrayIndex<1> * // true * type Case2 = IsArrayIndex<'1'> * // false * type Case3 = IsArrayIndex<-1> * ``` */ export type IsArrayIndex = T extends number ? And, IsGreaterOrEqual> : T extends string ? ParseNumber extends infer NumT extends number ? Not> extends true ? And, IsGreaterOrEqual> : false : false : never;