使用名称

时间:2016-08-09 13:53:41

标签: javascript node.js codemirror tern

Tl;博士版

使用TernJS进行自动完成,我想在函数上使用一个规则,以字符串作为参数,以便返回一个名称与给定的param相同的类型,例如:

foo("TypeA") returns +TypeA
foo("TypeB") returns +TypeB

简单来说,我正在搜索Tern中是否有可以使用其名称为您提供类型的符号。

长版:

CodeMirrorTernJS中设置的NodeJS结合使用,我试图模拟自定义工厂行为,并在ES6中提供JavaScript中的类似功能:

//Module: Test.js
module.exports = (function() {

  var test = {};
  //....
  test.classA = class ClassA {
    constructor() {
      //....
    },
    foo() {}
    //....
  }

  test.factoryClass = class Factory {
    constructor() {
      //....
    }

    register(name, classData) { 
      //....
    }
    createInstance(name) {
      //....
    }
  }
  return test;
})();

现在,我想要做的是: 如果我通过以下方式注册了ClassA:

var test = require("Test");

var factory = new test.factoryClass();
factory.register("ClassA", classA);

我创建了它的一个类实例:

var classAInst = factory.createInstance("ClassA");

我希望在编辑器中能够获取ClassA实例的方法。

classAInst.<AutoCompletion-KeyStroke> //This should give the completion list containing `foo`.

现在,我知道为了得到这个,我需要在。json定义中生成TernJS推理引擎规则,因此对于ClassA和Factory我有类似的东西:

{
  "Test" : {

    "ClassA": {
      "!type": "fn()"
      "prototype": {
         "foo": {
            "!type": "fn() -> string"
          }
      }
    }

    //....
    "Factory": {
      "prototype": {
        "register": {
          "!type": "fn(className: string, classDefinition: object)"
        },
        "createInstance": {
          "!type": "<This is what I need to specify properly>"
        }
      }
    }
  }

}

问题是我通过检查TernJS仓库中的ecma6.json文件找出了如何形成规则,因为我无法找到任何推理引擎的文档。

我尝试过这样的事情,尝试告诉引擎以某种方式索引类型,但它不起作用(我认为[]仅用于数组定义):

 "createInstance": {
   "!type": "fn(name: string) -> Test[!0]"
 }

所以,对此有任何帮助将不胜感激。任何关于推理引擎手册的链接或引用都会非常有用,因为我没有找到这样的信息。

0 个答案:

没有答案