我读过“整个互联网”,但是找不到从TypeScrypt来源获取语法树的任何示例(就像在Esprima中一样)。
我的意思是我如何获得这样的对象(Esprima Parser示例)

{
    "type": "Program",
    "body": [
        {
            "type": "VariableDeclaration",
            "declarations": [
                {
                    "type": "VariableDeclarator",
                    "id": {
                        "type": "Identifier",
                        "name": "answer"
                    },
                    "init": {
                        "type": "BinaryExpression",
                        "operator": "*",
                        "left": {
                            "type": "Literal",
                            "value": 6,
                            "raw": "6"
                        },
                        "right": {
                            "type": "Literal",
                            "value": 7,
                            "raw": "7"
                        }
                    }
                }
            ],
            "kind": "var"
        }
    ]
}

从javascript代码
var answer = 6 * 7;

仅用于TypeScript源文本?

附言我非常希望您的帮助,因为我不想写自己的糟糕自行车)

P.P.S.我认为lib文件typescript.ts(.js)和typescriptServices.ts(.js)可以帮助我,但是我不知道如何:(

解决了

非常感谢用户Steve Fenton。
如果有人感兴趣,这是我的代码:
// uses
var typeScriptLS =  new Harness.TypeScriptLS();
var ServicesFactory = new Services.TypeScriptServicesFactory();
var serviceShim = ServicesFactory.createLanguageServiceShim(typeScriptLS);

// add lib.d.ts
var _libText = window.document.getElementById('lib.d.ts').innerText;
typeScriptLS.addScript('lib.d.ts', _libText.replace(/\r\n?/g,"\n"), true);

// add greeter.ts
var _sourceText = window.document.getElementById('greeter.ts').innerText;
typeScriptLS.addScript('greeter.ts', _sourceText.replace(/\r\n?/g,"\n"), true);

// script name
var _scriptName = 'greeter.ts';
// get syntax tree
var _st = serviceShim.languageService.getSyntaxTree(_scriptName);
//console.log(_st);
console.log(JSON.stringify(_st, "", 2));

最佳答案

这个问题出现在back in September之前。

当前没有什么可以为您执行此操作-没有可调用的魔术getSyntaxTree方法来执行此操作。

不过,TypeScript编译器是开源的,并且完全用TypeScript编写,因此您可以对其进行扫描,以查找是否可以使用/添加句柄。

有利的一面是,您有很大的机会将您的工作作为开源项目发布,这是根据对两个问题的投票决定的,对此有一些需求。

或者,使用EsprimaSpiderMonkey从已编译的JavaScript(这是在运行时实际执行的代码)中获取语法树。

09-10 04:08