使用其名称获取Terntypes

Tl; dr版本

使用TernJS进行自动完成的目的,我想在函数上使用一个规则,将一个string作为参数,以便返回一个名称与给定参数相同的types,例如:

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

简而言之,我在寻找是否在Tern中有一个符号可以用你的名字给你一个types。

长版本:

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

 //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); 

我创build一个类的实例:

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

我想在编辑器中能够获得ClassA实例的方法。

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

现在,我知道为了得到这个,我需要在中生成TernJS推理机规则。 json定义,所以对于ClassA和工厂我有这样的东西:

 { "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文件来形成规则,因为我找不到推理引擎的任何文档。

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

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

所以,任何帮助,将不胜感激。 任何链接或推理引擎手册的参考也将非常有用,因为我没有设法find这样的信息。