2016-10-16 1 views
5

Je fais un peu de réflexion en utilisant la bibliothèque de typescript. Principalement, j'utilise ts.createSourceFile et en passant des fichiers stockés en mémoire. Cela fonctionne très bien et je peux facilement me déplacer dans les nœuds pour faire correspondre la syntaxe de liaison (dans les fichiers html) avec les ViewModels (tapuscrit) pour m'assurer que l'accès est bon.Créer un Typecript TypeScript sans utiliser ts.createProgram?

Mon problème est que je voudrais faire un contrôle de base de type maintenant avec les objets ts.SourceFile que j'ai. Jusqu'à présent, j'ai seulement pu suivre l'interface TypeChecker à la classe Program. Malheureusement, ts.createProgram prend des chemins vers les fichiers, alors que je veux passer la collection SourceFile que j'ai déjà.

Y a-t-il un moyen de faire une vérification de type en utilisant les objets ts.SourceFile que j'ai déjà? Tout ce que j'ai vraiment besoin de savoir, c'est si le côté droit est assignable à gauche, où j'ai les nœuds de type pour les deux.

Répondre

-1

Vous pouvez utiliser ts.createSourceFile() comme ceci:

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

Et puis dans la fonction visitNode, vous pouvez accéder au nœud NodeObject qui exposent les informations TypeChecker:

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

AFAIK, cette approche n » t donner accès aux informations de type, uniquement à l'arbre de syntaxe. – TGV

+0

oui, c'est vrai. Vous n'aurez pas accès au type statique. Cependant, vous pouvez utiliser l'interface 'ts.SyntaxKind' comme solution de contournement. –