UNPKG

remeda

Version:

A utility library for JavaScript and Typescript.

38 lines (37 loc) 1.99 kB
import { IterableContainer } from "./IterableContainer-JENOIFLG.cjs"; import { ToString } from "./ToString-BjDaFO-J.cjs"; import { EnumerableStringKeyOf } from "./EnumerableStringKeyOf-D7Pu3_7e.cjs"; //#region src/keys.d.ts type Keys<T> = T extends IterableContainer ? ArrayKeys<T> : ObjectKeys<T>; type ArrayKeys<T extends IterableContainer> = { -readonly [Index in keyof T]: Index extends number | string ? ToString<IsIndexAfterSpread<T, Index> extends true ? number : Index> : never }; type IsIndexAfterSpread<T extends IterableContainer, Index extends number | string> = IndicesAfterSpread<T> extends never ? false : Index extends `${IndicesAfterSpread<T>}` ? true : false; type IndicesAfterSpread<T extends ReadonlyArray<unknown> | [], Iterations extends ReadonlyArray<unknown> = []> = T[number] extends never ? never : T extends readonly [unknown, ...infer Tail] ? IndicesAfterSpread<Tail, [unknown, ...Iterations]> : T extends readonly [...infer Head, unknown] ? IndicesAfterSpread<Head, [unknown, ...Iterations]> | Iterations["length"] : Iterations["length"]; type ObjectKeys<T> = T extends Record<PropertyKey, never> ? [] : Array<EnumerableStringKeyOf<T>>; /** * Returns a new array containing the keys of the array or object. * * @param data - Either an array or an object. * @signature * R.keys(source) * @example * R.keys(['x', 'y', 'z']); // => ['0', '1', '2'] * R.keys({ a: 'x', b: 'y', 5: 'z' }); // => ['a', 'b', '5'] * @dataFirst * @category Object */ declare function keys<T extends object>(data: T): Keys<T>; /** * Returns a new array containing the keys of the array or object. * * @signature * R.keys()(source) * @example * R.Pipe(['x', 'y', 'z'], keys()); // => ['0', '1', '2'] * R.pipe({ a: 'x', b: 'y', 5: 'z' } as const, R.keys()) // => ['a', 'b', '5'] * @dataLast * @category Object */ declare function keys(): <T extends object>(data: T) => Keys<T>; //#endregion export { keys }; //# sourceMappingURL=keys-m9kOFXdi.d.cts.map