// Foo is a class-like function
function Foo() {
  this.x = 0; // constructs objects with property x
}
Foo.y = 0; // has static property y
Foo.prototype = { m() { return 0; } };

// exporting Foo directly doesn't work
// Foo's instance and static props are not picked up
exports.Foo = Foo;

// so you want to type Foo, by declaring it as a class
interface IFooPrototype {
  m: () => number;
}
interface IFoo extends IFooPrototype {
  x: boolean; // error, should have declared x: number instead
  static (): void;
  static y: boolean; // error, should have declared static y: number instead
  constructor(): void;
}
exports.Foo2 = (Foo: Class<IFoo>);
