@chickenjdk/byteutils
Version:
Some utilitys for working with binary data
29 lines (28 loc) • 1.69 kB
TypeScript
export type createIncrementingArrayOfLength<length extends number, temp extends number[] = []> = temp["length"] extends length ? temp : createIncrementingArrayOfLength<length, [...temp, temp["length"]]>;
export type addOneIncrement<value extends number[]> = [
...value,
value["length"]
];
export type rangeArray<from extends number, to extends number> = addOneIncrement<createIncrementingArrayOfLength<to>> extends [
...createIncrementingArrayOfLength<from>,
...infer value
] ? value : never;
export type uint8ArrayLike = Pick<number[], number | "length">;
export type asyncify<value extends any> = {
[key in keyof value]: value[key] extends (...args: any) => Promise<any> ? value[key] : value[key] extends (...args: any) => any ? (...args: Parameters<value[key]>) => Promise<ReturnType<value[key]>> : value[key];
};
export type IsAUnionAtTopLevel<T, U = T> = U extends any ? [T] extends [U[any]] ? true : false : false;
export type topLevelUnionArray<Array extends any[]> = Array extends [
infer First,
...infer Rest
] ? First extends any ? Rest extends [any, ...any[]] ? [First, ...topLevelUnionArray<Rest>] : [First] : never : never;
export type json = {
[key in string | number]: (string | number | json)[] | string | number | json;
};
export type cloneFunc<T> = T extends (...args: infer A) => infer R ? (...args: A) => R : never;
export type AwaitedUnion<T> = T extends Promise<infer U> ? AwaitedUnion<U> : T;
export type MaybePromise<T, IsAsync extends Boolean = true | false> = IsAsync extends false ? T : Promise<T>;
export type commonKeys<T, U> = keyof T & keyof U;
export type mergeValues<T, U> = {
[key in commonKeys<T, U>]: T[key] | U[key];
};