declare type Callback = (result: T) => void; interface Window { config: { relative_path: string; 'cache-buster': string; emojiCustomFirst: boolean; }; app: { alertSuccess(message?: string): void; alertError(message?: string): void; alertError(error: Error): void; }; templates: { parse(template: string, data: any, callback: Callback): void; }; utils: { generateUUID(): string; }; Textcomplete: any; } interface String { startsWith(str: string): boolean; } declare const socket: SocketIO.Server; interface JQuery { ajaxSubmit: any; draggable: any; } declare module 'translator' { export class Translator { public static create(lang?: string): Translator; public translate(input: string): Promise; } export function translate(input: string, callback: Callback): void; } declare module 'benchpress' { export function render(template: string, data: any): Promise; } declare module 'composer/controls' { export function insertIntoTextarea(textarea: HTMLTextAreaElement, text: string): void; export function updateTextareaSelection( textarea: HTMLTextAreaElement, start: number, end: number ): void; } declare module 'composer/formatting' { export function addButtonDispatch(name: string, callback: any): void; } declare module 'scrollStop' { export function apply(element: Element): void; } declare module 'fuzzysearch' { const fuzzysearch: (needle: string, haystack: string) => boolean; export = fuzzysearch; } declare module 'leven' { const leven: (a: string, b: string) => number; export = leven; }