Недавно я играл с 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);

Наслаждаться!