title: Recursive Types in TypeScript
body: <p>Let's suppose we try to create HTML build helper</p>
  <pre><code>build([
    'html', { lang: 'en' }, [
      ['head', [
        ['title', 'Hello, world!']
      ]
    ]
  ])
  </code></pre>
  <p>The type declaration for arguments of the <code>build</code> would be (actually it will be more complicated but let's consider just the simplest case)</p>
  <pre><code>type Node = [string, { [key: string]: string }, Node[]]
  </code></pre>
  <p>Unfortunately it didn't work, because TypeScript complains</p>
  <pre><code>TS2456: Type alias 'Node' circularly references itself.
  </code></pre>
  <p>Is there any workaround?</p>