interface GunNodeState { readonly [ key ] : number ; } interface GunNodeMeta { readonly '#' : string ; readonly '>' : GunNodeState ; } interface GunNode { readonly _ : GunNodeMeta ; readonly [ key ] : GunValue ; } interface GunGraphData { readonly [ key ] : GunNode | undefined ; } interface GunMsg { readonly '#' ? : string ; readonly '##' ? : string | number ; readonly get ? : { readonly '#' : string ; } ; readonly put ? : { readonly [ soul ] : GunNode ; } ; } type GunValue = object | string | number | boolean | null ;