这个答案有点脑残,因为我也对此感兴趣。希望能帮助到你。
我使用 Google Closure Compiler 静态分析 CoffeeScript 生成的代码。它有一个非常好的静态分析器,我不确定是否有充分的理由在这里重新发明轮子。简单的方法是手动编写注释:
###*
* @param {number} x
* @param {number} y
* @return {number}
###
adder = (x, y) -> x + y
这有点冗长,但另一方面,您正在借用闭包编译器的静态分析能力,它非常强大并且能够检查很多。我实际上以稍微简洁的方式编写类型注释,然后有一个脚本来重写咖啡文件。我的代码最终看起来像这样:
#! {number} x {number} y @return {number}
adder = (x, y) -> x + y
我相信您可以看到重写器非常简单。
在我继续之前快速说明。如果您通过闭包编译器运行代码,请务必使用-b
(bare)编译您的代码。闭包编译器还是不错的,但是做数据流分析还不够聪明。CoffeeScript 默认将您的代码包装在一个匿名函数中,这会使编译器出错。
沿着相同路径的另一个选项(这会破坏与 CoffeeScript 的兼容性,但会更酷)是让 Coffee 编译器编译如下内容:
adder = (number x, number y): number -> x + y
像这样进入JS:
/***
* @param {number} x
* @param {number} y
* @return {number
*/
var adder = function(x, y) {
return x + y;
};
然后可以在编译时将其输入闭包编译器 - 如果没有错误,编译器可以删除所有注释。
的确,这家伙似乎就是这么做的。可悲的是,他的作品似乎处于不完整的状态。
在所有这些情况下,我们将艰苦的工作——静态类型检查——推迟到闭包编译器。如果您不想这样做,我会理解,但是很难说服我从头开始构建一个全新的静态分析工具是值得的。:)
一年后编辑:这些天我只使用打字稿。:)