interface Employee {
  name: string;
  title: string;
}

interface Manager extends Employee {
  departement: string;
  numOfEmployees: number;
  scheduleMeeting: (topic: string) => void;
}

// Implements Employee and more, so:
// - can be used as an Employee parameter
// - is not of type Employee
// TS calls this a "structural type system" aka "duck typing": interfaces as
// matches as implemented even when not declared, like in Go.
let dev = {
  name: 'hr',
  title: 'senior TS dev',
  editor: 'VSCode',
};

let newEmployee : Employee = dev;

function foo(e: Employee) {
  console.log(e.name + ": " + e.title);
}

foo(dev);
foo(newEmployee);