Программируя традиционным образом, очень просто упустить из виду, в каких единицах измеряются числа, с которыми мы оперируем. Например, можно сложить метры с литрами, и никакой компилятор нам при этом не поможет.
Эта проблема реальная и уже доказано приводила к авариям, обошедшимся во многие миллионы долларов. (Одна из историй здесь).
Избежать этого помогает использование специальных библиотек, которые корректно работают с физическими единицами системы СИ типа метров или ваттов и иными единицами типа валют или штук.
Одна из таких библиотек - KotUniL (si-units), разработанная изначально на Котлине.
Сразу же после её появления автору библиотеки посыпались запросы по переносу её на JavaScript. Некоторое время назад в рамках обеспечения мультиплатформенности библиотеки разработан вариант библиотеки для JavaScript.
Как это принято в мире JavaScript, подключить библиотеку к вашему проекту можно с помощью NPM вот из этой репозитории.
К сожалению, JavaScript не поддерживает operator overloading и поэтому код смотрится менее элегантно, чем на Котлин.
Рассмотри, например, такую задачку: Маша протирала снаружи стекло аквариума, задела стоявшую рядом вазу, в результате чего стекло аквариума разбилось и вода вытекла на пол. В аквариуме до этой неприятности было 32 литра воды. Комната Маши имеет длину 4 метра и ширину 4,3 метра. На какой высоте в мм. находится сейчас вода в комнате, при условии, что она осталась там и не вытекла?
На Котлине решение выглядит таким образом:
val s = 4.m * 4.3.m
val h = 32.l/s
А на JavaScript нам приходится вместо знаков арифметических операций над размерными единицами использовать функции:
var s = m.times(4).timesExp(m.times(4.3));
var v = l.times(32);
var h = v.divExp(s);
Однако все остальные прелести KotUniL сохранены. Амперы с секундами складывать нельзя, а перемножать и делить можно.
Дальнейшую информацию о KotUniL вы надаете в репозитории на GitHub ( см. подробный пример использования в модуле web_app_js).
Про теоретические основы и особенности использования KotUniL вы можете прочитать и в этой серии стаей: