oaty
Version:
Object Array Transposer(y) - JS objects with multiple key/value structures
33 lines (32 loc) • 1.17 kB
TypeScript
export interface Options<K> {
keys?: K[];
}
declare type TransposedValues<T, K extends keyof T> = {
[V in T[K] extends string | number | symbol ? T[K] : never]: T[] | undefined;
};
export declare type Transposed<T, K extends keyof T> = {
[Key in keyof T]: TransposedValues<T, K>;
};
/**
* If T is not never, use T. Otherwise, infer the type from the keys K
*/
declare type InferType<T, K extends keyof any> = [T] extends [never] ? [K] extends [never] ? any : {
[Key in K]: any;
} & {
[Key in string | number | symbol]: any;
} : T;
export declare class OatyArray<T = never, K extends keyof T = keyof T> {
private _transposed;
private _data;
private _options;
constructor(data?: readonly InferType<T, K>[], options?: Options<K>);
get keys(): K[];
get length(): number;
get data(): InferType<T, K>[];
get transposed(): Transposed<InferType<T, K>, K>;
get<KN extends K>(keyName: KN): TransposedValues<InferType<T, K>, KN>;
get<KN extends K>(keyName: KN, keyValue: InferType<T, K>[KN]): InferType<T, K>[] | undefined;
push(...data: readonly InferType<T, K>[]): number;
private transpose;
}
export {};