нет же, можно с ней жить, не имея проблем, но придерживаясь правил, и настроив тулинг на запрет мутации, запрет примесей, запрет var/let, запрет неявного приведения и все будет ок
const cats: Cat[] = [] mutateAnimals(cats) cats.forEach(cat => cat.meow()) But failed in runtime with cat.meow is not a function Because of what? Because of mutations! Be smart, don't use mutations
А если ты на js+тесты а он на ts+тесты? То разница только в том что он будет лишние буквы набирать, когда пишет типы? И «кто победит» решает только ваша скорость набора текста?
+1, написать быстро и я могу - а саппортить потом кашу функций без типов с непонятными входными и выходными данными типа processPayment(params) или printReceipt(data) где params или data неизвестно что собой представляют и неизвестно что содержат - попробуй посаппорти (и порефактори).
визуально видеть что params имеет такой-то тип с такими-то полями а data другой тип с вот такими полями - очень облегчает понимание кода
такое ощущение что доклад сравнивает « тайпскрипт без тестов» (и других практик) и «js с тестами» в такой ситуации конечно второе побеждает. а если сравнивать «тайпскрипт с тестами» и «js с тестами» то первое читабельнее
но к примеру какой-то абстрактной компании, которая никак не выйдет на биржу и имеет оценку в несколько миллиардов приглашенные эксперты ВОЗМОЖНО сказали что внедрение тайпскрипта снизит стоимость компании на бирже на условные 20% в ближайшей перспективе (ближайшая перспектива - 3 года) (то что вы не прочитаете в паблике)
Мы оба пишем функцию sendInvoice(amount, description, recipientName, email) - Я на ts ты на js - функция делает инвойс в html формате и шлет на почту по smtp - не вижу ничего что усложнит мне работу кроме того что я потрачу чуть времени на дописывание :number и :string в 5-10 местах
В таком примере - да. А вот как только у нас оказывается что-то посложнее на входе - то в тесте мы вынуждены подкладывать настоящую фикстуру или делать is any