UNPKG

dabbjs

Version:

general javascript library

71 lines (70 loc) 2.21 kB
/** * LINQ select many * @template TIn, TOut * @param {TIn} input array of input values * @param selectListFn extractor function (t: {@link TIn}) => {@link TOut}[] * @returns array {@link TOut}[] */ export declare const selectMany: <TIn, TOut>(input: TIn[], selectListFn: (t: TIn) => TOut[]) => TOut[]; /** * return unique items in array * @param x array */ export declare const unique: <T>(x: T[]) => T[]; /** * * @param x * @param y * @returns */ export declare const union: <T>(x: T[], y: T[]) => T[]; export type ActiveNoteGroup = { length: 0; }; /** * grouping group */ export type IGroupBy<K extends keyof any, T> = { [P in K]: T; } & ActiveNoteGroup; /** * groups an array by a function key * @param list Array of items of type `T` * @param getKey grouping key function * @returns a group object with keys and array of same key values */ export declare const groupBy: <T, K extends keyof any>(list: T[], getKey: (item: T) => K) => IGroupBy<K, T[]>; /** * From T, pick a set of properties whose keys are of type P. */ export type PickOfType<T, P> = { [K in keyof T as P extends T[K] ? K : never]: T[K] & P; }; /** * */ export type WritableKeys<T> = { [P in keyof T]-?: Equals<{ [Q in P]: T[P]; }, { -readonly [Q in P]: T[P]; }> extends true ? P : never; }[keyof T]; export type Equals<X, Y> = (<T>() => T extends X ? 1 : 0) extends (<T>() => T extends Y ? 1 : 0) ? (<T>() => T extends Y ? 1 : 0) extends (<T>() => T extends X ? 1 : 0) ? true : false : false; export declare function setWritableProperty<T, V>(obj: T | PickOfType<T, V>, key: WritableKeys<typeof obj>, // <-- restrict to writable keys value: typeof obj[typeof key]): void; /** * gets an existing object property * @param obj object * @param key a key inside object * @returns */ export declare function getProperty<Type, Key extends keyof Type>(obj: Type, key: Key): Type[Key]; /** * sets an existing object property value * @param obj object * @param {Key} key a key inside object * @param {Type[Key]} value value * @returns object for linking */ export declare function setProperty<Type, Key extends keyof Type>(obj: Type, key: Key, value: Type[Key]): Type;