remeda
Version:
A utility library for JavaScript and Typescript.
40 lines (39 loc) • 2.43 kB
TypeScript
import { IterableContainer } from "./IterableContainer-BuT0t52g.js";
import { PartialArray } from "./PartialArray-BRx4EbNL.js";
import { TupleParts } from "./TupleParts-C-p-hluQ.js";
import { ClampedIntegerSubtract } from "./ClampedIntegerSubtract-BmNra3Vv.js";
import { CoercedArray } from "./CoercedArray-BhKI-0_E.js";
import { IsInteger, IsNegative, Writable } from "type-fest";
//#region src/drop.d.ts
type Drop<T extends IterableContainer, N extends number> = IsNegative<N> extends true ? Writable<T> : IsInteger<N> extends false ? Array<T[number]> : ClampedIntegerSubtract<N, TupleParts<T>["required"]["length"]> extends infer RemainingPrefix extends number ? RemainingPrefix extends 0 ? [...DropFixedTuple<TupleParts<T>["required"], N>, ...PartialArray<TupleParts<T>["optional"]>, ...CoercedArray<TupleParts<T>["item"]>, ...TupleParts<T>["suffix"]] : ClampedIntegerSubtract<RemainingPrefix, TupleParts<T>["optional"]["length"]> extends infer RemainingOptional extends number ? RemainingOptional extends 0 ? [...PartialArray<DropFixedTuple<TupleParts<T>["optional"], RemainingPrefix>>, ...CoercedArray<TupleParts<T>["item"]>, ...TupleParts<T>["suffix"]] : [...CoercedArray<TupleParts<T>["item"]>, ...TupleParts<T>["suffix"]] | Exclude<DropFixedTuple<TupleParts<T>["suffix"], RemainingOptional, true>, TupleParts<T>["suffix"]> : never : never;
type DropFixedTuple<T, N, IncludePrefixes = false, Dropped extends Array<unknown> = []> = Dropped["length"] extends N ? T : T extends readonly [unknown, ...infer Rest] ? DropFixedTuple<Rest, N, IncludePrefixes, [...Dropped, unknown]> | (true extends IncludePrefixes ? T : never) : [];
/**
* Removes first `n` elements from the `array`.
*
* @param array - The target array.
* @param n - The number of elements to skip.
* @signature
* R.drop(array, n)
* @example
* R.drop([1, 2, 3, 4, 5], 2) // => [3, 4, 5]
* @dataFirst
* @lazy
* @category Array
*/
declare function drop<T extends IterableContainer, N extends number>(array: T, n: N): Drop<T, N>;
/**
* Removes first `n` elements from the `array`.
*
* @param n - The number of elements to skip.
* @signature
* R.drop(n)(array)
* @example
* R.drop(2)([1, 2, 3, 4, 5]) // => [3, 4, 5]
* @dataLast
* @lazy
* @category Array
*/
declare function drop<N extends number>(n: N): <T extends IterableContainer>(array: T) => Drop<T, N>;
//#endregion
export { drop };
//# sourceMappingURL=drop-AjPGznRx.d.ts.map