I've interop'd with JS from Haskell and you can just go full dynamic property access. And gradually add phantom typed APIs around it.
console.log also still works fine