Я уже говорил о причинах не использовать TypeScript ранее, но не смог предложить альтернативы. В этой статье я познакомлю вас с ReasonML, лучшей альтернативой TypeScript.



ReasonML - это не совсем новый язык или язык вообще. Он основан на OCaml, который, в свою очередь, основан на языке ML. Они, наряду с некоторыми другими языками (такими как Rust, Scala или Elm), считаются членами семейства машинного обучения. Их основные черты - ориентация на функциональное программирование, строгую типизацию и неизменность.

ResonML - это, по сути, набор инструментов и улучшения синтаксиса для OCaml, чтобы он хорошо подходил для веб-разработки. Как вы, наверное, догадались, он компилируется в JavaScript и позволяет без проблем взаимодействовать с существующими пакетами JS. Однако он отличается от TypeScript несколькими ключевыми концепциями.

Во-первых, ReasonML гарантирует безопасность типов во время компиляции и выполнения. Это кое-что, что унаследовано от OCaml, и я не могу подчеркнуть, насколько это важно, поскольку TypeScript не гарантирует безопасность типов после компиляции. Более того, хотя TypeScript предупредит вас о несоответствии типов, но все равно будет компилироваться, ReasonML не будет компилироваться вообще. Это может показаться немного суровым, но я считаю, что полученное в результате душевное спокойствие того стоит.

Во-вторых, ReasonML основан на широко распространенном OCaml, существовавшем несколько десятилетий. Он реализует функциональное программирование так, как оно было изначально разработано, и изначально неизменяемо. TypeScript, с другой стороны, пытается быть универсальным языком, реализующим как функциональную, так и объектно-ориентированную парадигмы. В результате у него плохая реализация обоих.

В-третьих, ReasonML просто печатает лучше, чем TypeScript. Он предлагает все те же функции, которые нравятся людям в TypeScript, такие как вывод типов, интерфейсы (называемые записями в ReasonML) и линтинг. Но он делает все это лучше благодаря своему функциональному наследию. Например, рассмотрим этот пример на TypeScript:

Вы можете видеть, что из этого кода TypeScript предполагает, что типы x и y должны быть any, а также возвращаемое значение. Тот же код в ReasonML:

ReasonML делает вывод, что типы a, b и возвращаемое значение должны быть целыми числами, и предупредит вас, если вы попытаетесь передать строку.

ReasonML также имеет огромное сообщество и поддерживается Facebook, поэтому нет причин беспокоиться о поддержке и отсутствии материалов. А поскольку вы можете использовать любой JS-пакет из коробки, вы ничего не сможете сделать с ReasonML.

В качестве бонуса ReasonML также может компилироваться напрямую в OCaml, который, в свою очередь, может компилироваться в собственный код. Да, вы можете разрабатывать действительно нативные приложения, а также веб-приложения, используя одну и ту же кодовую базу!

Примеры

Надеюсь, я убедил вас хотя бы попробовать ReasonML. Вот несколько примеров распространенного синтаксиса ReasonML:

Спасибо за чтение! Дайте мне знать, что вы думаете о ResonML и какой учебник по ReasonML вы бы хотели, чтобы я написал. Также не стесняйтесь читать мои другие статьи: