2016-10-16 7 views
5

typescript 라이브러리를 사용하여 일부 리플렉션을 수행하고 있습니다. 주로 나는 ts.createSourceFile을 사용하고 메모리에 저장된 파일을 전달합니다. 이것은 실제로 잘 작동하고 노드를 통해 쉽게 html 파일의 바인딩 구문을 ViewModels (typescript)과 일치시켜 액세스가 양호한지 확인할 수 있습니다.ts.createProgram을 사용하지 않고 Typescript TypeChecker를 만드시겠습니까?

제 문제는 제가 가지고있는 ts.SourceFile 객체로 기본적인 유형 검사를하고 싶습니다. 지금까지 나는 TypeChecker 인터페이스를 추적하여 Program 클래스로 추적 할 수있었습니다. 죄송 합니다만 ts.createProgram은 이미 파일에 대한 경로를 취하고 있으며, 이미 가지고있는 SourceFile 컬렉션을 전달하려고합니다.

이미 가지고있는 ts.SourceFile 개체를 사용하여 유형 확인을 수행 할 수있는 방법이 있습니까? 내가 정말로 알아야 할 것은 오른쪽이 왼쪽에 지정 가능한지, 양쪽 모두에 대해 유형 노드가있는 것입니다.

답변

-1

당신과 같이 ts.createSourceFile()을 사용할 수

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

그리고 다음 visitNode 기능에, 당신은 TypeChecker 정보를 드러내는 NodeObject 노드에 액세스 할 수 있습니다

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

AFAIK를,이 방법은 '아무튼 유형 정보에 액세스 할 수 있으며 구문 트리에만 액세스 할 수 있습니다. – TGV

+0

네, 맞습니다. 정적 유형에 액세스 할 수 없습니다. 그러나, 당신은'ts.SyntaxKind' 인터페이스를 임시 해결책으로 사용할 수 있습니다. –