将Typescript添加到Coffeescript

Gre*_*ber 18 coffeescript typescript

我有一个构建链设置,将文件从coffeescript转换为typescript到javascript.我的问题是:将类型签名添加到coffeescript函数的最简单的侵入方法是什么?

coffeescript通过反引号支持原始javascript.但是,这意味着coffeescript不再理解反引号片段.

Coffeescript拒绝这些:

f = (`a:String`) -> a + 2
f = (a`:String`) -> a + 2
Run Code Online (Sandbox Code Playgroud)

我可以在函数上面写这个:

`var f = (String) => any`
Run Code Online (Sandbox Code Playgroud)

它编译,但不进行类型检查.我想这是因为Coffeescript已经宣布了这个变量.

我能弄清楚如何使其工作的唯一方法需要大量的样板

f = (a) ->
  `return (function(a:String){`
  a + 2;
  `})(a)`
Run Code Online (Sandbox Code Playgroud)

在新的Coffeescript Redux编译器中,反引号似乎无法正常工作:https: //github.com/michaelficarra/CoffeeScriptRedux/issues/71

我很清楚这是一个值得怀疑的努力,它现在只是一种体验.我目前使用contract.coffee,但我正在寻找实际类型.

Tob*_*nik 17

这是我的项目,它将CoffeeScript转换为TypeScript,然后将其与包含类型的d.ts文件合并.然后报告编译错误,如果有的话.

它叫做Compiled-Coffee.

  • 它应该被称为ToffeeScript (14认同)

Fen*_*ton 16

如果你想编写CoffeeScript,最好编写CoffeeScript并编译为JavaScript.

TypeScript的好处主要是设计时间的好处和更好的工具,因此在CoffeeScript和JavaScript中使用它会增加很少的好处,因为您将获得基于CoffeeScript代码的设计时间和工具.

您可以使用在TypeScript中使用CoffeeScript编写的库,反之亦然,这样您就可以在CoffeeScript中维护CoffeeScript库,并在决定使用哪种方式时将它们用于新的TypeScript文件中.

更新:我不确定如何对这个答案进行如此广泛的误解 - 我将假设我没有很好地解释这一点(而不是假设它仅仅是稻草人论证或对语言的超敏感性比较).

TypeScript确实是JavaScript的类型系统.静态类型在工作流程的早期作为程序员更有用.在IDE中设置时间警告意味着快速纠正常见错误,例如错误输入的变量名称,错误的参数,无效的操作等等.代码加下划线并带有错误注释意味着即时反馈.在编译时有这个很好,但你的反馈循环更长.鉴于在使用TypeScript时所有类型都被删除,我甚至不会讨论运行时.

至于所有"TypeScript vs CoffeeScript"评论 - 这个问题根本不是这个问题.问题是从CoffeeScript到TypeScript再到JavaScript.让我们来看看为什么这可能不理想:

  • 您只能在编译时获得类型反馈
  • 你不会得到自动完成
  • 您的CoffeeScript代码将不再紧凑 - 它将具有类型注释
  • 没有中间编译器,您的CoffeeScript代码将不再有效
  • 您将不得不使用额外的编译器,它需要与CoffeeScript版本x和TypeScript版本y同步
  • 您的IDE将无法理解您的CoffeeScript代码

  • @GregWeber类型确实是一个好处,但主要是在设计时.如果您的设计时间是CoffeeScript,它被编译成TypeScript,那么类型检查的好处将大大减少,因为您只知道TypeScript编译为JavaScript时的错误.TypeScript的理念是为设计时间带来更好的工具,以提高开发人员的工作效率. (4认同)
  • 不确定类型不是TypeScript的主要优点之一.你用过吗? (3认同)
  • @GregWeber类型是TypeScript的主要优点; 在这种情况下,类型的主要好处是改进的工具.到达JavaScript时,所有类型信息都会丢失.即使您在CoffeeScript中以反向标记声明函数,如果从CoffeeScript调用这些函数,也不会进行任何类型检查. (2认同)