interface LeadMsg { msg_type: 'set' | 'get' | 'error' | 'bulk'; cell?: CellRef; raw?: string; eval?: Eval; bulk_msgs?: Array; } interface CellRef { row: number; col: number; } type LiteralType = 'Number' | 'Boolean' | 'String'; type LiteralValue = number | string | boolean; type EvalRange = Array; interface Literal { type: LiteralType; value: LiteralValue; } interface EvalCellRef { eval: Eval; reference: CellRef; } interface LeadErr { code: 'DivZero' | 'TypeErr' | 'Syntax' | 'Server' | 'Unsupported'; desc: string; title: string; } // Tagged union type Eval = | { literal: Literal } | { cellref: EvalCellRef } | { range: Range } | { err: LeadErr } | 'unset';