2017-06-13 12 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:

場合、a.tsは以下のようにb.tsからVAR xを参照している

var y = x; 

b.ts:

var x = 5; 

この場合、.ts内のxの署名は、b.ts.xまたは同等のものとして解決されます。

私はちょうど.tsファイルを1つずつ解析するときに、このような関係をすべてAStsで解決したいと思っています。

答えて

0

あなたは

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

rootNamesを使用してプロジェクトを読み込むことができますが、プロジェクト内のすべてのtypescriptですファイルのリストです。私が知る限り、型を明示的に宣言しない限り、ASTは型を明示的に宣言しません。

たとえば、あなたはASTで

class MyClass { 
    // some code 
} 

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

を持っている場合は、instance1のノードはinstance2 typeプロパティのため、未定義のようなタイプのプロパティを持っていますあなたはProgram.getTypeChecker()を使用することができます型チェックのために適切なTypeReference

を持つことになります。これにより、プログラム内のファイルを分析するために使用できるTypeCheckerが返されます。

関連する問題