Напиши класс Expression который будет иметь методы:
Add(value) - добавить value значение к выражению
Substract(value) - отнять value от значения выражения
Divide(value) - разделить значение у выражения на число value
Multiply(value) - умножить значение выражения на число value
Result: Float - свойство, возвращающее итог внутри котрого происходит проверка что выражение корректно.
Сам класс имеет внутренне поле currentValue с которым и производит операции.
Каждый метод класса выполняет операцию над currentValue и в качестве результата возвращает сам себя.
т.е. код калькулятора будет простым:
let calc: Calculator = new Calculator(0); //значение currentValue по умолчанию
let result: number = calc
.Add(1) //0+1 = 1
.Substract(5) //1 - -5 = -4
.Multiply(4) //-4 * 4 = -16
.Result; //-16
alert(result);
можно добавить туда скобки:
OpenBrackets: Expression
CloseBrackets: Expression
Другие мат. операции и прочее.
в UI же классу передать callback'функцию когда изменяется выражение, когда ошибка и т.д.