Получить тип крачки, используя его имя

TL; Dr версия:

С помощью TernJS для целей автозаполнения я хочу использовать правило для функции, которое принимает строку в качестве параметра, чтобы вернуть тип с именем, совпадающим с заданным параметром, например:

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

Проще говоря, я ищу, есть ли в Tern нотация, которая может дать вам тип, используя его имя.

Длинная версия:

С помощью CodeMirror в комбинации с TernJS установить в NodeJSЯ пытаюсь смоделировать поведение фабрики и предоставить аналогичные возможности в JavaScript в ES6:

//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`.

Теперь я знаю, что для этого мне нужно сгенерировать правила механизма вывода TernJS в.json определения, поэтому для 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>"
        }
      }
    }
  }

}

Проблема в том, что я выяснил, как формировать правила, проверяя ecma6.json файл в репозитории TernJS, так как я не смог найти какую-либо документацию механизма вывода.

Я пытался сделать что-то вроде этого, пытаясь сказать движку таким образом индексировать тип, но это не работает (я полагаю, что [] используется только для определения массива):

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

Таким образом, любая помощь по этому вопросу будет оценена. Любая ссылка или ссылка на руководство по механизму логического вывода также будет очень полезна, поскольку мне не удалось найти такую ​​информацию.

0 ответов

Другие вопросы по тегам