Добавление Typescript в Coffeescript - программирование
Подтвердить что ты не робот

Добавление Typescript в Coffeescript

У меня есть настройка цепочки сборки, которая преобразует файл из coffeescript в typescript в javascript. Мой вопрос: какой минимально интрузивный способ добавить сигнатуры типов к функции coffeescript?

coffeescript поддерживает raw javascript через обратные ссылки. Однако это означает, что coffeescript больше не понимает фрагмент backtick.

Coffeescript отвергает эти:

f = (`a:String`) -> a + 2
f = (a`:String`) -> a + 2

Я могу написать это выше функции:

`var f = (String) => any`

Он компилируется, но не выполняет проверку типов. Я думаю, это потому, что Coffeescript уже объявила переменную.

Единственный способ, которым я мог понять, как заставить его работать, требует много шаблонов

f = (a) ->
  `return (function(a:String){`
  a + 2;
  `})(a)`

Backticks, похоже, не работают должным образом в новом компиляторе Coffeescript Redux: https://github.com/michaelficarra/CoffeeScriptRedux/issues/71

Я хорошо знаю, что это сомнительная работа, сейчас это просто эксперимент. В настоящее время я использую contracts.coffee, но я ищу актуальные типы.

4b9b3361

Ответ 1

Здесь мой проект, который транслирует CoffeeScript в TypeScript, а затем объединяет его с файлом d.ts, содержащим типы. Затем записываются ошибки компиляции, если они есть.

Его называют Compiled-Coffee.

Ответ 2

Если вы хотите написать CoffeeScript, лучше написать CoffeeScript и скомпилировать JavaScript.

Преимущество TypeScript в основном зависит от времени разработки и лучшего инструментария, поэтому использование его в середине CoffeeScript и JavaScript добавляет очень мало преимуществ, так как вы получите время разработки и инструменты на основе кода CoffeeScript.

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

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

TypeScript - действительно система типов для JavaScript. Статические типы больше используются для вас в качестве программиста ранее в рабочем процессе. Наличие предупреждений о времени разработки в вашей среде IDE означает быструю коррекцию распространенных ошибок, таких как неправильные имена переменных, неправильные параметры, недействительные операции и многое другое. Подчеркивание кода и аннотация с помощью ошибки означает мгновенную обратную связь. Наличие этого во время компиляции является хорошим, но цикл обратной связи длиннее. Я даже не буду говорить о времени выполнения, учитывая, что все типы стираются с этой точки при использовании TypeScript.

Как и во всех комментариях "TypeScript vs CoffeeScript", этот вопрос вовсе не об этом. Речь идет о компиляции с CoffeeScript на TypeScript, а затем на JavaScript. Давайте посмотрим, почему это может быть не идеальным:

  • Вы получите только обратную связь типа во время компиляции
  • Вы не получите автозаполнение
  • Ваш код CoffeeScript больше не будет компактным - он будет иметь аннотации типов
  • Ваш код CoffeeScript больше не будет действителен без промежуточного компилятора
  • Вам нужно будет использовать дополнительный компилятор, и он должен быть в шаге от версии CoffeeScript x и TypeScript версии y
  • Ваша IDE не поймет ваш код CoffeeScript

Ответ 3

Я думаю, что я придумал лучшее, что я могу сделать. В новом компиляторе Coffeescript Redux сложнее: на самом деле было бы проще попытаться взломать текущий компилятор coffeescript, чтобы сделать эту работу.

Способ сделать этот взгляд менее взломанным:

`var f : (a:Number) => Number = originalF`

Однако typescript вывод слабого типа не делает этого с этой формой. Это получает правильный анализ типов:

f = (a) ->
  `var a : Number = a`
  a + 2

Однако, я все еще не уверен, как указать возвращаемое значение с этой формой.

Ответ 4

Typescript - это сильный javascript. Coffee- script обеспечивает более удобный способ написания и чтения. Я не рассматриваю кофе script как язык. Это просто способ, стиль, который может быть привязан к любому языку.

Это очень уродливо и глупо с помощью backtick, чтобы "поддержать" такой сильный тип. Правильный способ использования кофе script с сильным типом:

  • Измените источник CoffeeScriptRedux, чтобы добавить сильный тип.
  • Измените источник синтаксического анализатора Typescript, чтобы использовать синтаксис coffee- script.
    • Кажется, никто этого не делает.