2017-06-13 53 views
1

我想将TypeScript项目解析为AST。如何将TypeScript代码解析为AST

我可以通过解析单个文件:

import ts = require("typescript"); 
var fs   = require('fs'); 
var util  = require('util'); 


const ast = ts.createSourceFile('sample.ts', fs.readFileSync('sample.ts').toString(), ts.ScriptTarget.ES6, true); 

console.log("AST:"+util.inspect(ast)); 

我甚至可以通过环中的文件和筛选文件通过扩展并运行上述代码,以生成AST。

但是我想解析整个项目,以便在AST中保留关系(如导入)。

例如:

如果a.ts是参考从b.ts变种x作为如下:

a.ts:

var y = x; 

b.ts:

var x = 5; 

在这种情况下,.ts中x的签名应该解析为:b.ts.x或等价物。

我只是想在ASTS中解决所有这些关系,因为我一个接一个地解析.ts文件。

回答

0

可以使用

ts.createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost, oldProgram?: Program)

rootNames是所有打字稿文件列表中的项目加载的项目。据我所知,除非明确声明类型,否则AST不会引用它。

例如。如果你有

class MyClass { 
    // some code 
} 

let instance1 = new MyClass(); 
let instance2: MyClass = new MyClass(); 

在AST,为instance1节点有类型属性未定义,为instance2型物业将有适当TypeReference

进行类型检查,你可以使用Program.getTypeChecker()。这将返回一个TypeChecker,它可用于分析程序中的文件。