Недавно я играл с Angular 2 и обнаружил, что он использует Typescript, а не простой Javascript.
Поэтому перед тем, как перейти к Angular 2, я решил поиграть с Typescript и обнаружил множество его преимуществ. Как программист с сильным опытом ООП, оказывается, что Typescript может быть очень похож на C++, Java; есть поддержка private/public, статических переменных, классов, инкапсуляции, типов данных, дженериков, а также новейших возможностей ES6/7
Вот пример ООП-подхода к Typescript (вы можете скопировать его и поиграть с ним на http://www.typescriptlang.org/play/)
class Person { static totalPersonCreated: number = 0; constructor(private name: string, private age: number) { Person.totalPersonCreated++; } getName():string { return this.name; } getAge():number { return this.age; } } class Employee extends Person { constructor(name:string, age:number, private isFullTime:boolean, private empId:number) { super(name, age); } getInfo():string { return super.getName() + " " + super.getAge() + " " + this.empId + " " + (this.isFullTime ? "FT" : "PT"); } getId():number { return this.empId; } isEmployeeFullTime(): boolean{ return this.isFullTime; } } class Payroll { employees: Employee[] = []; addEmployee( employee:Employee) { if (employee) { this.employees.push( employee ); } } getEmployeeAt(index:number):Employee { if (this.employeeExists(index)){ return this.employees[index]; } return null; } removeEmployeeAt(index:number):Employee { if (this.employeeExists(index)){ return this.employees.splice(index, 1)[0]; } return null; } private employeeExists(index:number):boolean { return (index >= 0 && index < this.employees.length); } getSize():number { return this.employees.length; } } var payroll = new Payroll(); payroll.addEmployee( new Employee("Jake", 26, true, 1001)); payroll.addEmployee(new Employee("Anna", 33, false, 1002)); for (let i = 0; i < payroll.getSize(); i++){ let emp = payroll.getEmployeeAt(i); console.log(emp.getInfo()); } var removedEmp = payroll.removeEmployeeAt(1); console.log( removedEmp.getName() + " " + removedEmp.getId() + " has been removed from payroll." ); console.log("Remaining employees = " + payroll.getSize()); console.log("Total persons created = " + Person.totalPersonCreated);
Наслаждаться!