2016-10-16 15 views
5

Tür kitaplığı kullanarak biraz yansıma yapıyorum. Öncelikle, ts.createSourceFile kullanıyorum ve bellekte saklanan dosyaları iletiyorum. Bu gerçekten iyi çalışır ve erişimin iyi olduğundan emin olmak için ViewModels (typescript) ile bağlama sözdizimini (html dosyalarında) eşleştirmek için düğümlerde kolayca hareket edebilirim.ts.createProgram kullanmadan bir Typescript TypeChecker oluşturun?

Sorunum, şu anda sahip olduğum ts.SourceFile nesneleri ile bazı temel tür denetimlerini yapmak istiyorum. Şimdiye kadar sadece TypeChecker arayüzünü tekrar Program sınıfına kadar takip edebildim. Ne yazık ki, ts.createProgram dosya yollarını alırken, zaten sahip olduğum SourceFile koleksiyonunu geçmek istiyorum.

Zaten sahip olduğum ts.SourceFile nesnelerini kullanarak Tür Denetimi yapmanın bir yolu var mı? Gerçekten bilmem gereken tek şey sağ tarafın sola atayabiliyor olması, her ikisi için de tip düğümlerine sahip olduğum.

cevap

-1

Öyle gibi ts.createSourceFile() kullanabilirsiniz:

let sourceCode = fs.readFileSync(commander.file); 
let sourceFile = ts.createSourceFile(commander.file, sourceCode.toString(), ts.ScriptTarget.ES2015, true); 
visitNode(sourceFile); 

Sonra visitNode işlevinde, sen TypeChecker bilgi açığa NodeObject düğüme erişebilir:

function visitNode(node: NodeObect) {  
    recognize(node); 
    node.getChildren().forEach(c => visitNode(c)); 
} 
+0

afaik, bu yaklaşım kokan tür bilgisine sadece sözdizimi ağacına erişim izni verin. – TGV

+0

evet, bu doğru. Statik türe erişemezsiniz. Ancak, 'ts.SyntaxKind' arabirimini bir geçici çözüm olarak kullanabilirsiniz. –