export type Nullable = T | null; export type Recordable = Record; export interface ReadonlyRecordable { readonly [key: string]: T } export type EmitType = (event: string, ...args: any[]) => void; export interface Fn { (...arg: T[]): R } export type Promisable = T | Promise; export type Nullable1 = T | null | undefined; export type Functional = T | ((...args: any[]) => T); export type DeepPath = { [K in keyof T & string]: T[K] extends object ? `${Prefix}${K}` | DeepPath : `${Prefix}${K}` }[keyof T & string];