将Typescript添加到Coffeescript
我有一个构建链设置,可以将文件从coffeescript转换为typescript再转换为javascript。我的问题是:向coffeescript函数添加类型签名的最简单的方法是什么 coffeescript通过反勾号支持原始javascript。然而,这意味着coffeescript不再理解backtick片段 Coffeescript拒绝以下内容:将Typescript添加到Coffeescript,coffeescript,typescript,Coffeescript,Typescript,我有一个构建链设置,可以将文件从coffeescript转换为typescript再转换为javascript。我的问题是:向coffeescript函数添加类型签名的最简单的方法是什么 coffeescript通过反勾号支持原始javascript。然而,这意味着coffeescript不再理解backtick片段 Coffeescript拒绝以下内容: f = (`a:String`) -> a + 2 f = (a`:String`) -> a + 2 我可以在函数上方写下:
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编译器中似乎无法正常工作:
我很清楚,这是一个可疑的尝试,现在只是一个实验。我目前使用contracts.coffee,但我正在寻找实际的类型。如果您想编写CoffeeScript,最好编写CoffeeScript并编译为JavaScript <> PraseScript的好处主要是设计时间效益和更好的工具,所以在咖啡脚本和JavaScript中间使用它会带来非常小的好处,因为你将根据你的咖啡代码获得设计时间和工具。 您可以在TypeScript中使用您在CoffeeScript中编写的库,反之亦然,因此您可以在CoffeeScript中维护您的CoffeeScript库,并在您决定使用哪种方式时在新的TypeScript文件中使用它们 更新:我不确定这个答案怎么会有如此广泛的误解——我将假设我没有很好地解释这一点(而不是假设这仅仅是草人论点或对语言比较过于敏感) TypeScript确实是JavaScript的类型系统。静态类型对于您在工作流的早期程序员来说更有用。在IDE中设置设计时警告意味着快速纠正常见错误,如输入错误的变量名、不正确的参数、无效的操作等等。让代码加下划线并加上错误注释意味着即时反馈。在编译时使用它是好的,但是您的反馈循环更长。我甚至不会谈论运行时,因为在使用TypeScript时,所有类型都会在此时被删除 至于所有的“TypeScript vs CoffeeScript”评论,这个问题根本不是这个问题。问题是如何从CoffeeScript编译到TypeScript,然后再编译到JavaScript。让我们看看这可能不理想的原因:
- 您只能在编译时获得类型反馈
- 你不会自动完成
- 您的CoffeeScript代码将不再紧凑-它将具有类型注释
- 如果没有中间编译器,您的CoffeeScript代码将不再有效
- 您将不得不使用一个额外的编译器,它需要与CoffeeScript版本x和TypeScript版本y同步
- 您的IDE无法理解您的CoffeeScript代码
- 我想我的想法是我能做的最好的了。在新的Coffeescript Redux编译器中,事情更难:实际上,尝试破解当前的Coffeescript编译器以使其工作起来更容易
让它看起来不那么粗糙的方法是:
`var f : (a:Number) => Number = originalF`
然而,typescript的弱类型推断在这个表单中做得并不好。
这将获得适当的类型分析:
f = (a) ->
`var a : Number = a`
a + 2
但是,我仍然不确定如何使用此表单指定返回值。以下是我的项目,它将CoffeeScript转换为TypeScript,然后将其与包含类型的d.ts文件合并。然后报告编译错误(如果有)
它被称为。类型脚本是一种强类型的javascript。 咖啡脚本提供了一种更舒适的写作和阅读方式。 我不把咖啡脚本当作一种语言。 这只是一种方式,一种可以附加到任何语言上的风格 这是非常丑陋和愚蠢的通过backtick来“支持”这样强大的类型。 使用强类型实现coffee脚本的正确方法:
- 修改源以添加支持的强类型
- 这项工作已经完成
- 修改Typescript解析器源以使用coffee脚本语法。
- 似乎没有人这样做
#define BEGIN{
当编写C时。这似乎不是一个好主意……你们两位之前的评论者,显然将这两种类型混合在一起是很可怕的。我相信这就是OP提出问题的原因,并且希望找到一个解决方案……不确定类型如何不是TypeScript的主要优点之一。你们使用过它吗?@GregWeber类型确实是一个优点,但主要是一个t设计时间。如果您的设计时间是CoffeeScript,它被编译成了TypeScript,那么类型检查的好处将大大减少,因为您只知道TypeScript编译成JavaScript时的错误。TypeScript的理念是在设计时间使用更好的工具,以使开发人员更高效。@GregWeber这是这是一个有用的视频,Anders Hejlsberg在其中解释了这一点,可能比我所能解释的要好-Greg是对的。类型是,作为vim用户,TypeScript的主要优点。请注意,即使语言作者并不打算这样做,这也是正确的。@GregWeber类型是TypeScript的主要优点;TypeScript中的主要优点是类型示例是改进的工具。当您使用JavaScript时,所有类型信息都会丢失。即使您在CoffeeScript的back ticks中声明函数,如果您从CoffeeScript调用这些函数,您也不会得到任何类型检查。它应该被称为ToffeeScript。我希望有些人可以做最后一个,以允许在TypeScript中使用一些CoffeeScripty语法 :-)