Вашему вниманию предлагается перевод статьи, мнение автора которой я не разделяю абсолютно. Но статья уже собрала множество комментариев, включая поддерживающие. Было бы любопытно обсудить ее на Хабре, благо она небольшая.


За последнюю неделю несколько разных людей интересовались через твиттер моим мнением о развитии TypeScript (отлично зная, что я не являюсь его любителем). Собравшись с мыслями, я решил оформить их в виде этого поста.

Предупреждение: Это мое сугубо личное мнение, и я со всем уважением отношусь к команде разработчиков TypeScript. Также следует учесть, что у меня всего 3 недели опыта его практического использования: две с Nodejs 5.x и одна с Angular 2.

Нестандарт


TypeScript – это то, как, по мнению Microsoft, должен выглядеть JavaScript. У таких технологий, которые противопоставляют себя открытым / open source проектам есть одна закономерность. Они обычно проваливаются. Навскидку: Flash, Silverlight, CoffeeScript.

Если у вас большой проект, то выбор TypeScript – это то, с чем вам придется жить долгое время. Спорю на что угодно, что через 3 года JavaScript все еще будет здесь. А вот про TypeScript я такое сказать, увы, не могу.

ЭТО рано или поздно случится…


Рано или поздно JavaScript обзаведется поддержкой типов. Это неизбежно. По правде говоря, учитывая скорость развития JavaScript в последнее время, я удивлен, что поддержка типов еще не объявлена как “stage-0 proposal”. В тот момент, когда это случится, TypeScript сразу же превратится в тыкву технический долг.

Обратите внимание, что TypeScript раньше имел свой собственный синтаксис работы с модулями. А потом вышел ES6 и теперь разработчики TypeScript предлагают всем переходить на новый синтаксис. Чувствуете закономерность?

TypeScript тут довольно давно, и что?


TypeScript доступен с 2012 года!!! Я считаю, что его популярность – это целиком и полностью заслуга Angular2. Лично для меня это красный флажок.

Развивается не сообществом


Я не вижу сильного вовлечения сообщества в работе над спецификацией, грамматикой, языком. В разработке ES* влияние разработчиков со всего мира намного заметнее. Возможно, я ищу не там, но, ИМХО, им надо слушать разработчиков, а не имплементировать C# в JavaScript?!

Квадрат в круглом разъеме


Добавление типов в не-типизированный язык само по себе является сложной задачей. По моим ощущениям, TypeScript ставит типы впереди JavaScript. Это приводит к странностям при использовании «родных» фичей JavaScript.

Я фанбой Babel


Babel — *****! Если бы вы спросили меня год назад, буду ли я использовать транспайлер, я бы посчитал вас за сумасшедшего. Sourcemap, gulp/grunt/watch/build/итд звучали для меня каким-то кошмаром. А потом раз – и зацепило.

Babel потрясающе использует архитектуру плагинов. Мне очень нравится использовать самые “новые” фичи уровня “stage-0”. Да, выше по тексту я говорил про “нестандартные фичи”, Но то, что предлагает Babel, довольно скоро в том или ином виде появится в JavaScript. Все что нужно будет сделать – это исправить синтаксис с помощью поиска и замены. Плюс, использование “stage-0” фичей в реальных проектах позволяет проверить их на практике и поделиться результатами с разработчиками языка. Также радует возможность компилировать проект для разных платформ: nodejs 4 или 5, или для браузера.

TypeScript поддерживает компиляцию только для ES3/ES5/ES6. При этом nodejs 5.x только частично поддерживает ES6, так что при использовании TypeScript мы зависаем в непонятном “промежуточном состоянии”. А если компилировать в ES5 то получается много polyfills, которые сложно отлаживать.

Три буквы: TSD


TypeScript требует определений для всех файлов с исходным кодом, использованных в приложении. Звучит логично, да? Ему нужно знать типы, чтобы иметь возможность скомпилировать код. Но что будет, если вы используете библиотеку, которая не написана на TypeScript (а таких, секундочку, подавляющее большинство)? Если это популярная библиотека, то для нее, скорее всего, уже будет написан TSD. А если нет – то его придется писать вам. Или подменять все ее глобальные идентификаторы. Больше работы, больше головной боли, и с этим ничего нельзя поделать.

Что в коробке?


Мне нравится использовать самые последние фичи. Так что, начав использовать TypeScript, я ожидал увидеть уже привычные “stage-1” и “stage-0” вещи из ES6. Меня ждало разочарование – часть из них пока отсутствует. Потому что у разработчиков большие проблемы втиснуть их в рамки типизированного языка (троеточие, destructuring итд). Тем не менее, что-то все же есть, декораторы, например. И это заставляет меня постоянно упираться в стены – что я могу использовать, а что нет. В основном команда TypeScript добавляет в язык только фичи уровня “stage-3”.


Используйте типы только там, где необходимо


Думаю, я слышал это уже больше сотни раз. Но эти ребята не говорят вам, что какую-то информацию о типах добавлять придется в любом случае. И это обернется большой кучкой any, размазанной по всему вашему “старому” коду. Что превращает миграцию на TypeScript в непростую задачу.

Что насчет FlowType?


Учитывая мое негативное мнение, высказанное выше, вы, наверное, думаете что я так же не люблю FlowType? Не угадали. Мне кажется, что разработчики FlowType ставят во главу угла JavaScript, аккуратно надстраивая над ним типы. Для меня использование этого языка ощущается более естественным. Плюс – компилятор в виде плагина для Babel.

Вы, наверное, скажете, что это все равно нестандартное расширение? Да, но типы рано или поздно приземлятся в JavaScript. Но даже если этого не случится, всегда есть плагин strip-flow-types для Babel :)

До ката использована работа художника Сергея Корсуна «Кащей прячет утку в зайца»

Комментарии (61)


  1. SirEdvin
    09.03.2016 10:36
    +7

    Если вы не согласны с автором, то почему?
    Вроде он высказал тезисы, которые сложно оспорить:

    • TypeScript не управляется сообществом
    • TypeScript имеет плохую совместимость с JavaScript библиотеками
    • Рано или поздно поддержка типов будет в JavaScript и тогда TypeScript окажется никому не нужным.

    Не считая других, о которых мне сложно судить.


    1. serf
      09.03.2016 10:52
      +10

      Рано или поздно поддержка типов будет в JavaScript и тогда TypeScript окажется никому не нужным.

      Как отмечает Austin "Все что нужно будет сделать – это исправить синтаксис с помощью поиска и замены", так вот когда появятся типы в ECMAScript тогда можно будет применить его волшебную "автозамену" :) Вообще не видно чтобы они там планиовалии типы в своих стандартах, так что ждать их появления в стандарте придется долго, не говоря уже о появлении в бразерах, а с TypeScript уже сейчас можно писать как принято говорить maintainable и scalable приложения.


    1. forcewake
      09.03.2016 10:59
      +14

      Я могу оспорить ваши цитаты из перевода.

      • TypeScript не управляется сообществом

        Вы имеете уникальную возможность пойти и прямо сейчас внести свой посильный вклад в развитие данной технологии. Путь начинается отсюда.
      • TypeScript имеет плохую совместимость с JavaScript библиотеками

        ts это надмножество js, следовательно, вы можете просто скопировать рабочее решение и использовать в ts — работать оно будет идентично. Если вам нужно чуть больше безопасности — на помощь придет tsd. Если оно устарело, чего-то не хватает, то вы можете сами это исправить и помочь другим.
      • Рано или поздно поддержка типов будет в JavaScript и тогда TypeScript окажется никому не нужным.

        Если бы вы следили за развитием языка, то увидели бы что он не вносит чего-то такого, что ломает концепции (как CoffeeScript, к примеру) — язык развивается последовательно. И я так может стать, что обещанная вами поддержка типов в js будет идентичной ts. Тогда все заиграет другими красками.


      1. gearbox
        09.03.2016 11:05

        ts это надмножество js, следовательно, вы можете просто скопировать рабочее решение и использовать в ts — работать оно будет идентично

        можно про этот момент поподробнее (я без стеба). не силен в typescript, только погружаюсь, уже несколько раз сталкивался с этим утверждением и все никак не вкурю — как можно безболезненно подкрутить ванильный js к typescript проекту? по любому как минимум тайпинг писать ведь придется?


        1. serf
          09.03.2016 11:10
          +5

          typescript это superset js, так что любой уже написанный js будет изначально являтся валидным typescript кодом. С 1.8 версии добавился флаг --allowJs, в таком случае даже переименовывать файлы не нужно будет (то есть можно переводить на ts постепенно, но при этом собирая все в один бандл).


        1. degorov
          09.03.2016 11:10
          +6

          Не придётся, если типы не нужны. Более того, уже можно использовать tsc просто как ES6+ > ES5 компилятор. И JSX он тоже умеет компилировать, угу.


      1. SirEdvin
        09.03.2016 11:39

        ts это надмножество js, следовательно, вы можете просто скопировать рабочее решение и использовать в ts — работать оно будет идентично. Если вам нужно чуть больше безопасности — на помощь придет tsd. Если оно устарело, чего-то не хватает, то вы можете сами это исправить и помочь другим.

        А автор говорит, что для каждого подключенного файла в проект нужен tsd. Он не прав?


        1. Sergiy
          09.03.2016 11:45
          +7

          Не прав, tsd нужен только для самопроверки и автодополнений в редакторе кода.


      1. easimonenko
        09.03.2016 12:53
        +4

        ts это надмножество js, следовательно, вы можете просто скопировать рабочее решение и использовать в ts — работать оно будет идентично.

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


    1. yorick_kiev_ua
      09.03.2016 14:46
      +4

      Потому что аргументы его субъективны.
      1. «Не управляется сообществом» не означает автоматического fail: есть масса примеров, когда «управляемые сообществами» проекты загибались и наоборот, с ног до головы проприеритарные языки вполне торт.
      2. Есть dts для популярных библиотек, совершенно не проблема написать свой, если совсем невмоготу: thirdPartyCompanent: any и дальше в старом добром js стиле.
      3. Рано или поздно будут и яблони на Марсе, но что мне делать конкретно здесь и сейчас? TS ИМХО появился именно потому, что очень уж отдалённое это «рано или поздно» и вообще непонятно наступит ли.

      Ну и еще пара вещей: «TypeScript доступен с 2012 года!!! Я считаю, что его популярность – это целиком и полностью заслуга Angular2» — а не наоборот: он настолько зрелый, удобный и популярный, что даже Google выбрал TS для разработки(не pure js, не свой собственный Darth, а ts oт Майкрософта. От богомерзкого Майкрософта, Карл)?

      P.S. Пример Flash, как «провалившейся» технологии… 20 лет в интернете, фактически монополист в своей нише, до сих пор не могут выпилить… Если это «провал», что что же такое «успех»?


    1. timramone
      11.03.2016 00:06

      TypeScript не управляется сообществом

      Поддержка tsx (typescript and xml, аналог facebook'овского jsx для react с типами) была написана сообществом, после упорных доработок была включена в компилятор и уже полгода как доступна в Visual Studio. Официально. Говорить при этом, что TypeScript не управляется сообществом, мне кажется совершенно некорректно.


  1. serf
    09.03.2016 10:44
    +6

    Если это популярная библиотека, то для нее, скорее всего, уже будет написан TSD. А если нет – то его придется писать вам. Или подменять все ее глобальные идентификаторы. Больше работы, больше головной боли, и с этим ничего нельзя поделать.

    Для серьезного долгосрочного проекта однократное написание TSD не стоит ничего, к тому же количество добаляемых в проект библиотек обычно довольно ограничено и в первую очередь будут выбираться "взрослые" библиотеки для которыз TSD уже готовы. Полагаю этот Austin работает с серьезными проектами, но тогда мне не понятно зачем притягивать за уши подобные доводы.


    1. Guria
      16.03.2016 14:28

      Вот никак не могу понять как правильно написать d.ts для moment / jquery плагина, если в качестве менеджера тайпингов у меня typings.
      Пол дня уже долблюсь. Среди уже опубликованных тайпингов подходящего примера не нашлось.


      1. Guria
        16.03.2016 14:59

        То что мне надо описано в разделе Module Augmentation.
        Вот только проблема, что я не могу написать Scale.prototype.advancedMethod = /* insert implementation */; в t.sd файле


  1. forcewake
    09.03.2016 11:04
    +10

    Я считаю, что его популярность – это целиком и полностью заслуга Angular2.

    Ох-ей. Как голословно-то. Angular2 появился не так уж и давно, что ставит под сомнение такие вот голословные высказывания.
    Порой мне кажется, что сама Microsoft приплачивает таким вот хейтерам, чтобы язык был у всех на виду :)


  1. serf
    09.03.2016 11:13
    +7

    Посмотрел LInkedin профиль этого Austin, вроде опытный человек (хотя не все опытыне являются инженерами), а пишет какую-то желтизну, как будто заказали ему этот пост или просто решил трафика/внимания привлечь к себе.


  1. KvanTTT
    09.03.2016 11:22
    +10

    Typescript – это то, как, по мнению Microsoft, должен выглядеть JavaScript. У таких технологий, которые противопоставляют себя открытым / open source проектам есть одна закономерность. Они обычно проваливаются. Навскидку: Flash, Silverlight, CoffeeScript.

    Что-то я не понял. И Typescript и CoffeScript являются open source.


    1. Frost47rus
      09.03.2016 11:55
      +22

      А я про флеш не понял)) 20 успешных лет в вебе (учитывая, что аудитория технологии до сих пор колоссальна) — это провал? :)


  1. mayorovp
    09.03.2016 11:30
    +1

    TypeScript поддерживает компиляцию только для ES3/ES5/ES6. При этом nodejs 5.x только частично поддерживает ES6, так что при использовании TypeScript мы зависаем в непонятном “промежуточном состоянии”.
    Автор оригинала что, не догадался выстроить два транслятора в цепочку? :)

    Решение же очевидно — сначала компилируем ts в es6, потом компилируем es6 в совместимый с nodejs 5.x код.


    1. easimonenko
      09.03.2016 12:57
      +1

      Компилирую из TypeScript в ES6, проблем с Node.js 5 не имею. Единственное, что нужно делать, это задавать опцию module: commonjs.


    1. iKBAHT
      10.03.2016 02:07

      а что мешает компилировать в ES5 и запускать на ноде 5.x?


      1. mayorovp
        10.03.2016 06:38

        Ну, видимо, что-то мешает. Недостаточно красиво...


    1. PQR
      11.03.2016 23:47

      Поддерживаю выше недоумение! Сам компилирую цепочкой TypeScript (target ES6) -> Babel (куча настроенных presets) -> получаем ES5


    1. Guria
      16.03.2016 14:29
      -1

      скомпилируется из ts в es6?

      let { a, b, ...rest } = props

      Тут надо аналог babel для ts исходника :)


  1. evocatus
    09.03.2016 11:32
    +3

    Насчёт типов… в Lua появился тип int в последней версии (5.3). В Python вводят возможность типизирования по желанию, насколько я знаю. Есть ещё mypy.

    Короче, интересный тренд намечается.


    1. grossws
      10.03.2016 13:26
      +1

      Возможность типизирования звучит странно. У питона и так строгая система типов, строку с числом вы сложить не сможете. Другой вопрос, если вводят опциональную статическую типизацию.


      1. evocatus
        10.03.2016 14:15

        Правильнее сказать аннотации для типов. PEP3107, PEP0484


        1. grossws
          10.03.2016 17:36

          А кто их в рантайме использует? Для ide крайне полезно, это да.


    1. bromzh
      10.03.2016 16:02
      +1

      Что-то всё в кучу смешалось...

      в Lua появился тип int

      В lua есть такие базовые типы: nil, boolean, number, string, function, userdata, thread, table.
      Просто до 5.3 все числа были с плавающей точкой. Нынче же тип number имеет 2 "подтипа" (вернее сказать, 2 реализации). Т.е. переменная, содержащая число, может быть в одном из 2-х внутренних представлений: либо float (как раньше), либо integer (вот это нововведение). Но это сделали только для оптимизаций. Т.е. в синтаксисе нет абсолютно никаких изменений, изменились только внутренние алгоритмы. Да и вообще, луа чаще всего используется как простой встраиваемый язык, так что статическая типизация в ней вряд ли появится.

      В Python вводят возможность типизирования по желанию

      Конечно нет.

      Цитата из PEP-0484
      Python will remain a dynamically typed language, and the authors have no desire to ever make type hints mandatory, even by convention.


      1. evocatus
        10.03.2016 21:34

        Я недавно узнал про Julia и мне очень понравились многие идеи. Одно непонятно: она может компилироваться в sland-alone бинарник? Это же несложно, если используется LLVM?


  1. Kempston
    09.03.2016 11:45
    +10

    У меня Javascript с ароматом ванили.
    Твои типы опять не туда угодили.


  1. SergeiStartsev
    09.03.2016 11:48
    +14

    Ожидал увидеть аргументированную позицию, вместо этого набор клеше. Коротко по основным пунктам.

    cпорю на что угодно, что через 3 года JavaScript все еще будет здесь. А вот про TypeScript я такое сказать, увы, не могу.

    3 года в мире frontend — это очень даже приличный срок на самом деле, даже если не брать в голову, что цифра взята невесть откуда. А вообще это сродни спору об использованию фреймворков, они как правило исчезают/заменяются гораздо быстрее и часто замена не масштабируется на сколько нибудь большой проект, но что-то я не вижу падаения спроса на них.

    Обратите внимание, что TypeScript раньше имел свой собственный синтаксис работы с модулями. А потом вышел ES6 и теперь разработчики TypeScript предлагают всем переходить на новый синтаксис. Чувствуете закономерность?

    Имхо, замечательная закономерность, что авторы придерживаются стандартов.

    Я считаю, что его популярность – это целиком и полностью заслуга Angular2.

    Angular2 и не вышел-то еще толком и неясно еще как выстрелит, а автор приписываею ему заслугу популярности TS. Мне почему-то кажется, что ребята из Angular отказались от своего велосипеда в пользу TS как раз из-за его популярности и скожести идей.

    Я не вижу сильного вовлечения сообщества в работе над спецификацией, грамматикой, языком.

    Субъективно, конечно, но для меня показательно количество обсуждения и оперативная реакция на issues в сообществе на гитхабе.

    По моим ощущениям, TypeScript ставит типы впереди JavaScript.

    Было бы здорово посмотреть на конкретные примеры, которые автор имеет в виду.

    TypeScript поддерживает компиляцию только для ES3/ES5/ES6.

    Сейчас TS позволяет использовать некоторые фичы ES7, а полная поддержка ожидается после того как устаканется ES7.

    А если компилировать в ES5 то получается много polyfills, которые сложно отлаживать.

    Это точно проблема TS или характерная черта любого транспилятора? Ну и sourcemaps никто не отменял.

    Три буквы: TSD

    Ответили выше.

    Так что, начав использовать TypeScript, я ожидал увидеть уже привычные “stage-1” и “stage-0” вещи из ES6.

    Остается загадкой, что автор понимает под stage-0. Но вот здесь есть подробный роадмап того, что уже есть и что планируется.

    Что превращает миграцию на TypeScript в непростую задачу.

    В этом с автором согласен, мигрировать старый проект, который ничего не знает о типах, на типизированый скорее всего будет сильно веселой задачей. Но если автор пробовал миграцию старого проекта на ES6, то знает, что эта задача тоже сильно не уступает в веселости.


    1. serf
      09.03.2016 12:14
      -2

      Но если автор пробовал миграцию старого проекта на ES6, то знает, что эта задача тоже сильно не уступает в веселости.

      Я вообще считаю мигрировать на ES6 нет большого смыслы, ну станет год более "сахарным", но все фундаментальные проблемы то все равно останутся на месте, чего не скажешь о TypeScript.


      1. SergeiStartsev
        09.03.2016 12:38

        Например, из-за модульности, этому принципу можно было следовать и ранее, используя amd/commonjs спецификации описания модулей, но с es6 вы получаете стандарт.


        1. serf
          09.03.2016 12:48

          webpack/browserify без проблем решают вопросы модульности.


          1. SergeiStartsev
            09.03.2016 12:59

            Это все мимо стандарта, хотите стандарт — используйте полифил.


            1. serf
              09.03.2016 13:01

              webpack обработает es6 импорты при небольшой его настройке, а в v2 которая в бете это уже из коробки идет. Хотя я хз уживется ли es6 импорт с es5 кодом не пробовал, я require стиль использую.


  1. orcy
    09.03.2016 12:12
    +2

    cпорю на что угодно, что через 3 года JavaScript все еще будет здесь. А вот про TypeScript я такое сказать, увы, не могу

    Это довольно серьезный аргумент для проектов которые собираются жить долго. Но насколько я понимаю typescript производит достаточно близкий код в javascript, так что если вдруг TypeScript ушел с горизонта транслируете все в js и сохраняете в репозитории. Признаюсь правда что сам на ts ничего не писал, рассказываю из того что о нем прочитал/просмотрел.


  1. baka_cirno
    09.03.2016 12:18
    +7

    TypeScript весь фан убивает, как будто на Java пишешь. На больших проектах оно, говорят, помогает, но для себя я никакого смысла им пользоваться не вижу. Если уж хочется безопасности, то лучше ELM за вымя потрогать, он куда более изящный и концептуальный.


    1. xGromMx
      09.03.2016 13:54

      Если быть честным, то более изящный и с исправленными проблемами haskell'я — это purescript.


      1. PQR
        11.03.2016 23:50

        Elm vs. Purescript: выбираю Еlm, т.к. он банально проще и ближе к народу, что ли… ближе к реальному production использованию. А Purescript — он крут, очень крут, но это совсем для любителей Хаскеля.


  1. yul
    09.03.2016 12:58
    +8

    Статья в целом очень слаба, но вот это мне особенно понравилось:

    Также следует учесть, что у меня всего 3 недели опыта его практического использования
    Babel — *****! Если бы вы спросили меня год назад, буду ли я использовать транспайлер, я бы посчитал вас за сумасшедшего. Sourcemap, gulp/grunt/watch/build/итд звучали для меня каким-то кошмаром. А потом раз – и зацепило.

    Еще через пару недель его зацепит TypeScript и он напишет хвалебную статью?


  1. Alexey2005
    09.03.2016 13:22
    -4

    Если WebAssembly всё же взлетит, JS может ждать весьма печальное будущее.
    Сейчас многие пользуются им лишь потому, что нет реальной альтернативы. А когда станет можно писать фронтэнд на любом языке, под который только создан компилятор, и начнут появляться всевозможные Java for Web, C++Web, WebHaskell и им подобные, JS может и вовсе скончаться.


    1. mayorovp
      09.03.2016 13:29
      +5

      <irony>Node.js for Web не даст языку умереть!</irony>


  1. zapolnoch
    09.03.2016 17:12
    +2

    Мы 20 лет обходились без статической типизации и не страдали. Почему вдруг это стало такой проблемой?


    1. sanex3339
      09.03.2016 17:50
      +3

      Потому что на дворе 2016 год, и на JS'е пишутся уже не только всякие менюшечки и слайдбарчики, но и крупные приложения.


      1. zapolnoch
        09.03.2016 18:04
        -3

        Поэтому typescript захватил аж 0,03% рынка?


        1. yorick_kiev_ua
          09.03.2016 18:33

          А как они это считают очень интересно было бы узнать. В случае с TypeScript вообще нельзя 100% определить, js писался «руками» или его компилятор выдал. И это в случае если у вас есть исходник, а не минифицированый бандл, там вообще о том, кто и как его писал сказать можно примерно ничего.

          По поводу «почему это вдруг стало» — так оно совсем не вдруг. Вот вам списочек(когда я заглядывал туда последний раз года два назад там было около 200 наименований). За редким исключением всё это попытки как-то решить эту внезапную проблему на самых разных уровнях.

          https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js


          1. zapolnoch
            09.03.2016 18:40

            Они считают через публичное API.
            Когда CSS стал сложным, появились LESS и SASS. Сейчас они вместе занимают больше 25% рынка.
            Когда JS стал сложным, появились Backbone, Ember, Knockout и Angular. А TypeScript занял свои достойные 0,03%.


            1. yorick_kiev_ua
              09.03.2016 19:56
              +1

              Это что-то типа опроса, когда кто хочет тот и сообщает? Всё ясно, спасибо. Это типа «100% программ пишутся на Java, по результатам опроса через публичное API на сайте По данным опроса на java.com».

              >Когда JS стал сложным, появились Backbone, Ember, Knockout и Angular.

              Это просто библиотеки, при чём тут они к разговору? Тем более Angular, который видимо задолбались писать на pure js и таки начаи пилить в TS.

              Вы пройдите по ссылке и увидите огромное разнообразие костылей: там и «пишем на C#/Java/… и перегоняем всё в js» и тонны специально придуманых языков TypeScript/CofeScript/Darth/… от груп энтузиастов до гигантов типа Google/MS.
              Это всё попытки борьбы со сложностью, полытки переложить часть проверок на компилятор, игнорировать этот факт довольно глупо.


            1. stalkerg
              10.03.2016 11:56

              Когда CSS стал сложным, появились LESS и SASS. Сейчас они вместе занимают больше 25% рынка.

              Всё наоборот, LESS, SASS, Stylus появились из-за того, что CSS слишком примитивный (сейчас по лучше).


    1. stalkerg
      10.03.2016 11:58
      +5

      В JS мир ринулось куча Java/C#/C++ разработчиков и начали страдать.


      1. zapolnoch
        10.03.2016 14:43
        -4

        Если завтра в JS-мир ринутся старые пердуны фортранщики, то будем ругать JS за отсутствие операторов работы с динамической памятью?


        1. stalkerg
          10.03.2016 14:58

          Уже ругают, и JS прогибается, вон TypedArray появился и это только начало.


  1. Riim
    09.03.2016 17:45
    -1

    Согласен на счёт FlowType, действительно как-то ненавязчиво он типы добавляет, указал тип — проверяет, не указал — пытается как-то его вывести и если уж возникает, то очень редко и действительно по делу. С typescript приходиться пол дня разбираться как его так настроить, что бы он уткнулся и не лез там где его не просят. Причём совсем утыкаться он всё же не хочет и кучу any всё равно приходиться добавлять. FlowType ещё долго до ума доводить (typescript тут всё же сильно впереди), но основа у него явно поудачней будет.


    1. Ununtrium
      09.03.2016 18:05
      +4

      image


  1. Ununtrium
    09.03.2016 17:59
    -1

    Стиль изложения стартапщика из силиконовой долины, который под колесами после 16 часов непрерывной работы. Очередная вода с провокационным названием типа "Да, Детка, Typescript — Это Отстой". Автор пописав чего-то там на TS под node и Angular2 делает выводы по поводу языка вообще.


  1. dom1n1k
    09.03.2016 18:55
    +4

    Мне в целом нравится TypeScript, но я считаю его нишевой штукой. Кмк, его стихия — это крупные, долгосрочные проекты. Там где некоторая дополнительная громоздкость и лишний элемент в технологическом стеке — разумная плата за упорядоченность. Массовый рынок он не захватит. Но и не загнется, а отъест несколько процентов в своем сегменте (если говорить об обозримой перспективе — что будет через 10+ лет, не знает никто).


    1. serf
      13.03.2016 02:19
      -2

      Естественно TS массово рынок не захватит, потому что на рынке полно простых поделок, и это нормально. Уже ведь давно используют всякие питоны/php/руби для одних задач (стартапики всякие, пилоты, ну совсем упоротые и для серьезных проектов), и Java / C# / C++ для других. Так вот и здесь.


  1. rosko
    09.03.2016 20:15
    -7

    Я начинал писать с Паскаля, где строгая типизация, не пошло, скатился в Бейсик :)
    Потом был Делфи, надстройка над Паскалем, с такой же строгой типизацией. Использовал пару лет, достало, ушел в ПХП.
    С ПХП перешел на ДжаваСкрипт. И тут, и там нету никакой типизации. И это очень хорошо!!!

    Совсем не понимаю к чему ДжС типизация. Ну, зачем? Хотите быть уверенными в собственном коде? Пишите тесты/спеки. А часть по сути тестов засовывать в код — нехорошо.


    1. gearbox
      13.03.2016 13:35

      А часть по сути тестов засовывать в код

      Вообще то это не тесты а контракты. С вашей логикой все строго типизованные языки тесты в код засовывают.