@bemedev/types
Version:
Type definitions for Bemedev projects
49 lines • 2.81 kB
TypeScript
import type { RecursiveArrayOf } from './arrays.types';
export type SingleOrRecursiveArrayOf<T> = T | RecursiveArrayOf<T>;
export type SoRa<T> = SingleOrRecursiveArrayOf<T>;
export type Primitive2 = string | number | boolean;
export type Primitive = Primitive2 | undefined | null;
export type SingleOrArray<T> = T | T[] | ReadonlyArray<T>;
export type SoA<T> = SingleOrArray<T>;
export type PrimitiveObjectMap = {
[key: Keys]: SoRa<_PrimitiveObject>;
};
type _PrimitiveObject = Primitive | PrimitiveObjectMap;
/**
* A type that represents a primitive object, which can be a primitive value or an object
*
* @remark
*/
export type PrimitiveObject = SoRa<_PrimitiveObject>;
export type NExtract<T, U extends T> = Extract<T, U>;
export type NExclude<T, U extends T> = Exclude<T, U>;
export type NotUndefined<T> = Exclude<T, undefined>;
export type Nu<T> = NotUndefined<T>;
export type Undefiny<T> = T | undefined;
export type Un<T> = Undefiny<T>;
export type Fn<Args extends any[] = any[], R = any> = (...args: Args) => R;
export type Cast<A, B> = A extends B ? A : B;
export type Keys = keyof any;
export type TypeStrings = 'string' | 'number' | 'boolean' | 'bigint' | 'symbol' | 'undefined' | 'object' | 'function';
export type KeyTypes = Record<Keys, TypeStrings | Checker2>;
export type KeyTypesFrom<T extends KeyTypes> = {
[K in keyof T]: T[K] extends TypeStrings ? T[K] : T[K] extends Checker<infer R> ? R : never;
};
export type NonN<T> = T extends undefined | null ? any : NonNullable<T>;
export type Defaulted<T, U extends NonN<T>> = T extends undefined | never | null ? U : T;
export type UnionKeys<U> = U extends Record<infer K, any> ? K : never;
export type _UnionToIntersection1<U> = boolean extends U ? U : (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
export type _UnionToIntersection2<U> = {
[K in UnionKeys<U>]: U extends Record<K, infer T> ? T : never;
};
export type UnionToIntersection<U> = _UnionToIntersection2<_UnionToIntersection1<U>>;
export type UnionOmit<T, K extends Keys> = T extends any ? Omit<T, K> : never;
export type UnionNOmit<T, K extends keyof T> = UnionOmit<T, K>;
export type LastOfUnion<T> = ((T extends any ? (x: () => T) => void : never) extends (x: infer I) => void ? I : never) extends () => infer U ? U : never;
export type UnionToTuple<T, A extends any[] = []> = [T] extends [never] ? A : UnionToTuple<Exclude<T, LastOfUnion<T>>, [LastOfUnion<T>, ...A]>;
export type Checker<T = unknown> = ((value: unknown) => value is T) | Fn<[unknown], boolean>;
export type Checker2<T = unknown> = (value: unknown) => value is T;
export type FnBasic<Main extends Fn, Tr extends object> = Tr & Main;
export type Equals<T, U> = T extends U ? U extends T ? true : false : false;
export {};
//# sourceMappingURL=commons.types.d.ts.map