typedash
Version:
modern, type-safe collection of utility functions
1 lines • 1.39 kB
Source Map (JSON)
{"version":3,"sources":["../../src/functions/take/take.ts"],"names":[],"mappings":";AAYO,SAAS,KACd,OACA,OACY;AACZ,MAAI,SAAS,GAAG;AACd,WAAO,CAAC;AAAA,EACV;AAEA,SAAQ,OAAO,MAAM,GAAG,KAAK,KAAK,CAAC;AACrC","sourcesContent":["import { Maybe } from '../../types';\n\n/**\n * Returns the first `count` items from `array`.\n * @param array The array to take items from.\n * @param count The number of items to take.\n * @returns The first `count` items from `array`.\n * @example\n * ```ts\n * take([1, 2, 3, 4, 5], 3) // [1, 2, 3]\n * ```\n */\nexport function take<const T extends readonly unknown[], C extends number>(\n array: Maybe<T>,\n count: C\n): Take<T, C> {\n if (count <= 0) {\n return [] as Take<T, C>;\n }\n\n return (array?.slice(0, count) ?? []) as Take<T, C>;\n}\n\ntype Take<\n TArray extends readonly unknown[],\n TCount extends number,\n> = TCount extends 0\n ? []\n : `${TCount}` extends `-${number}`\n ? []\n : TArray extends readonly unknown[]\n ? TakeFromStart<TArray, TCount>\n : [];\n\ntype TakeFromStart<\n TArray extends readonly unknown[],\n TCount extends number,\n Taken extends unknown[] = [],\n> = TArray['length'] extends 0\n ? Taken\n : TCount extends Taken['length']\n ? Taken\n : TArray extends readonly [infer First, ...infer Rest]\n ? TakeFromStart<Rest, TCount, [...Taken, First]>\n : Array<TArray[number]>;\n"]}