class Foo {
  type: 'foo';
  foo: string;
}

class Bar {
  type: 'bar';
  bar: string;
}

type Foobar = Foo | Bar;

function foobar(x: Foobar): string {
  if (x.type === 'foo') {
    return foo(x);
  } else if (x.type === 'bar') {
    return bar(x);
  } else {
    return 'unknown';
  }
}

function foo(x: Foo): string {
  return x.foo;
}

function bar(x: Bar): string {
  return x.bar;
}
