Ответ 1
Здесь мой проект, который транслирует CoffeeScript в TypeScript, а затем объединяет его с файлом d.ts, содержащим типы. Затем записываются ошибки компиляции, если они есть.
Его называют Compiled-Coffee.
У меня есть настройка цепочки сборки, которая преобразует файл из 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, но я ищу актуальные типы.
Здесь мой проект, который транслирует CoffeeScript в TypeScript, а затем объединяет его с файлом d.ts, содержащим типы. Затем записываются ошибки компиляции, если они есть.
Его называют Compiled-Coffee.
Если вы хотите написать CoffeeScript, лучше написать CoffeeScript и скомпилировать JavaScript.
Преимущество TypeScript в основном зависит от времени разработки и лучшего инструментария, поэтому использование его в середине CoffeeScript и JavaScript добавляет очень мало преимуществ, так как вы получите время разработки и инструменты на основе кода CoffeeScript.
Вы можете использовать библиотеки, которые вы пишете на CoffeeScript, в TypeScript и наоборот, чтобы вы могли поддерживать ваши библиотеки CoffeeScript в CoffeeScript и потреблять их в новых файлах TypeScript, пока вы решаете, какой путь идти.
Обновление: я не уверен, как может быть такое широкое неправильное толкование этого ответа - я собираюсь предположить, что я не объяснил это хорошо (вместо того, чтобы предполагать, что это просто аргумент соломы или гипер- чувствительность к языковому сравнению).
TypeScript - действительно система типов для JavaScript. Статические типы больше используются для вас в качестве программиста ранее в рабочем процессе. Наличие предупреждений о времени разработки в вашей среде IDE означает быструю коррекцию распространенных ошибок, таких как неправильные имена переменных, неправильные параметры, недействительные операции и многое другое. Подчеркивание кода и аннотация с помощью ошибки означает мгновенную обратную связь. Наличие этого во время компиляции является хорошим, но цикл обратной связи длиннее. Я даже не буду говорить о времени выполнения, учитывая, что все типы стираются с этой точки при использовании TypeScript.
Как и во всех комментариях "TypeScript vs CoffeeScript", этот вопрос вовсе не об этом. Речь идет о компиляции с CoffeeScript на TypeScript, а затем на JavaScript. Давайте посмотрим, почему это может быть не идеальным:
Я думаю, что я придумал лучшее, что я могу сделать. В новом компиляторе Coffeescript Redux сложнее: на самом деле было бы проще попытаться взломать текущий компилятор coffeescript, чтобы сделать эту работу.
Способ сделать этот взгляд менее взломанным:
`var f : (a:Number) => Number = originalF`
Однако typescript вывод слабого типа не делает этого с этой формой. Это получает правильный анализ типов:
f = (a) ->
`var a : Number = a`
a + 2
Однако, я все еще не уверен, как указать возвращаемое значение с этой формой.
Typescript - это сильный javascript. Coffee- script обеспечивает более удобный способ написания и чтения. Я не рассматриваю кофе script как язык. Это просто способ, стиль, который может быть привязан к любому языку.
Это очень уродливо и глупо с помощью backtick, чтобы "поддержать" такой сильный тип. Правильный способ использования кофе script с сильным типом: