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);