dabbjs
Version:
general javascript library
71 lines (70 loc) • 2.21 kB
TypeScript
/**
* 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;