我已经阅读了整个互联网,但找不到有关从TypeScript源代码中获取语法树(就像在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.S. 我非常希望得到您的帮助,因为我不想自己写一个可怕的自行车)
P.P.S. 我认为库文件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));
Harness
在哪里定义?我在tsc.js
、typescript.js
和typescriptServices.js
中都没有看到" Harness "。更广泛地说,你如何运行这个已解决的代码示例? - Jason Kleban