export type IDateFormat = 'american' | 'european' | 'japanese'; export type JsVal = string | number | boolean | JsVal[] | null; export type JsonObj = { [prop: string]: JsVal | JsonObj; }; export type IObj = Record; export type NextRequest = { abort?: boolean; waitFor?: Promise; } | undefined; export type MyAsyncGenerator = AsyncGenerator; export type IFuncArgs = T extends (...args: infer A) => any ? A : never; export type IArrayEl = A extends Array ? T : never; export type IKeyString = Extract; export type Awaited = T extends PromiseLike ? U : T; export type ExtractAllBut = K extends T ? (K extends Except ? never : K) : never; export type IDeclaredKeys = { [K in keyof T]: string extends K ? never : (number extends K ? never : K); } extends { [_ in keyof T]: infer U; } ? U : never; export type IFunc = (...args: any[]) => R; export type IAwaited = T extends Promise ? R : never; export type IAwaitedFunc = F extends IFunc ? IAwaited : never; export type ITryCatch = (func: F, ...args: IFuncArgs) => ReturnType | Error; export type ICtxTryCatch = (ctx: IObj, func: F, ...args: IFuncArgs) => ReturnType | Error; export type IAsyncTryCatch = >>(func: F, ...args: IFuncArgs) => Promise | Error>; export type ICtxAsyncTryCatch = >>(ctx: IObj, func: F, ...args: IFuncArgs) => Promise | Error>; export type IWithTryCatch = (func: F) => (...args: IFuncArgs) => ReturnType | Error; export type IWithAsyncTryCatch = >>(func: F) => (...args: IFuncArgs) => Promise | Error>; export type INullableProps = { [prop in keyof T]?: T[prop]; }; export type INonNullableProps = { [prop in keyof Required]: NonNullable; }; export type FlagPropsType = { [K in keyof T]: T[K] extends TypeToFlag ? never : K; }; export type FilterPropsNames = FlagPropsType[keyof T]; export type OmitProp = Pick>; export type OmitPropsType = Pick>; export type INewable ReturnType> = { new (...args: IFuncArgs): ReturnType; }; export type IEnumLike = { [name: string]: T | string; [idx: number]: string; }; export type IValOf = T extends { [prop in keyof T]: infer Val; } ? substractType extends undefined ? Val : Val extends substractType ? never : Val : never;