Tl;博士版:
使用TernJS
进行自动完成,我想在函数上使用一个规则,以字符串作为参数,以便返回一个名称与给定的param相同的类型,例如:
foo("TypeA") returns +TypeA
foo("TypeB") returns +TypeB
简单来说,我正在搜索Tern中是否有可以使用其名称为您提供类型的符号。
长版:
将CodeMirror
与TernJS
中设置的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]"
}
所以,对此有任何帮助将不胜感激。任何关于推理引擎手册的链接或引用都会非常有用,因为我没有找到这样的信息。