Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Typescript添加到Coffeescript_Coffeescript_Typescript - Fatal编程技术网

将Typescript添加到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 我可以在函数上方写下:

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

coffeescript通过反勾号支持原始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编译器中似乎无法正常工作:


我很清楚,这是一个可疑的尝试,现在只是一个实验。我目前使用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脚本语法。
        • 似乎没有人这样做

      也许你应该选择一种或另一种语言。您的代码让人想起被误导的Pascal程序员在执行
      #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语法 :-)