export type Nullable = { [P in keyof T]: T[P] | null } export type Subset = { [K in keyof T]?: Subset } export type Dictionary = { [key: string]: T }; export type Index = string | symbol | number; export interface DOMEvent extends Event { target: TTarget; } export function delay(time: number) { return new Promise(resolve => setTimeout(resolve, time)); } export function throttle(decorated: (...args: TArgs) => void, time: number = 150) { let timeout: number | undefined; return function (this: any, ...args: TArgs): void { if (typeof timeout !== 'undefined') { window.clearTimeout(timeout); } timeout = window.setTimeout(() => { timeout = undefined; decorated.call(this, ...args); }, time); } }