interface JavaObject { discriminator: 'JavaObject'; } type BridgeValueType = void | string | number | boolean | JavaObject | BridgeValueType[]; type BridgeType = (...args: BridgeValueType[]) => BridgeValueType; interface ScriptCraft { useBridge(name: string, ...args: BridgeValueType[]): BridgeValueType; bridges: { [key: string]: BridgeType }; } declare const __scriptcraft__: ScriptCraft; interface Console { log(...args: string[]): void; info(...args: string[]): void; warn(...args: string[]): void; error(...args: string[]): void; dir(...args: string[]): void; debug(...args: string[]): void; trace(...args: string[]): void; assert(condition: boolean, ...args: string[]): void; } declare const console: Console;