Sooo… Yeah. В течение последней недели пытался переписать один из своих карманных проектов по экономике с C# на TypeScript. Почему? У Node.JS проще с HTTP и вебсокетами, ботами телеграм и работой с данными (json, бд). Но в процессе реализации функций я изменил своё мнение. Чем же плох TS, несмотря на строгую типизацию?

1) Статический анализ часто подводит. VSCode не выдаёт ошибки с this. в статических методах или импортом по абсолютному пути модуля. Он в принципе не особо ругается на наличие или отсутствие this, когда это может привести к ошибкам. Они вылезают только в Runtime. Это сильно замедляет и усложняет процесс разработки – постоянно приходится компилировать код и проверять: работает ли он.

2) Важен порядок импорта. Я пытался решить проблему абсолютных импортов через пакет (я приводил этот метод в сниппете: https://sneakbug8.com/wiki/notes/typescript/absolute-path/). Но это вызывало много проблем. Выяснилось, что для TS важен порядок импорта, т.к. директивы import преобразуются в require. Я оочень долго до этого додумывался.

3) Отсутствие рефлексии. Да, классы есть, но работать с ними сложно. Система порядка обновлений модулей на синглтоне со списком модулей и проверкой классов рефлексией оказалась крайне сложной для реализации в TS. А рефлексии нет, так как язык компилируется в JS, в котором нет типов. Соответственно, нельзя построить рефлексию. Хотя есть бета функция сохранения метаданных классов и функций, которая в будущем сможет помочь решить эту проблему.

В целом C# оказался хоть и гораздо более классическим и заскорузлым энтерпрайзом, но и более стабильным и предсказуемым в поведении. Да, C# мой первый и основной ЯП. Да, я могу быть дедом-энтерпрайзером, который вместо смузи пьёт виски. Prove me wrong.