diff options
Diffstat (limited to 'src/utils/anonymous.ts')
-rw-r--r-- | src/utils/anonymous.ts | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/utils/anonymous.ts b/src/utils/anonymous.ts new file mode 100644 index 0000000..ddd28bd --- /dev/null +++ b/src/utils/anonymous.ts @@ -0,0 +1,25 @@ +export const identity = <T>(x: T): T => x; +export const defined = <T>(x: T | undefined | null): x is T => + x !== undefined && x !== null; +export const instanciate = <T, A>(C: new (arg: A) => T): (arg: A) => T => { + return (arg: A): T => new C(arg); +}; +export const get = <T extends Record<K, unknown>, K extends PropertyKey>( + key: K, +): (obj: T) => T[K] => +(obj: T): T[K] => obj[key]; +export const getCall = < + T extends Record<K, (...args: unknown[]) => unknown>, + K extends PropertyKey, +>( + key: K, + ...args: Parameters<T[K]> +): (obj: T) => ReturnType<T[K]> => +(obj: T): ReturnType<T[K]> => obj[key](...args) as ReturnType<T[K]>; +export const pass = <T>(fn: (x: T) => void): (x: T) => T => (x: T): T => { + fn(x); + return x; +}; +export const equal = <T>(x: T): (y: T) => boolean => (y: T): boolean => x === y; +export const extremeBy = (arr: number[], mode: "max" | "min"): number => + Math[mode](...arr); |