TypeScript 抽象構文ツリーを使用する場合、関数パラメーターとして提供された TypeScript.Expression のコンパイル時の型をどのように判断すればよいですか?
次のコードでは、setTimeout に渡されるパラメーターの型を知りたいと考えています。
function invoke(functionArg : () => void) {
setTimeout(functionArg);
}
AST は次のように並んでいます。
setTimeout -> TypeScript.CallExpression
functionArg -> TypeScript.SyntaxKind.Identifier
この情報を取得するためにいくつかの方法を試しましたが、TypeChecker は型を「any」と報告し続けます。
this.languageServices.getDefinitionAtPosition(...).kind // yields 'parameter'
this.languageServices.getTypeDefinitionAtPosition(...).kind // yields ''
this.typeChecker.typeToString(...); // yields 'any'
this.typeChecker.getTypeAtLocation(...).flags // yields any
this.typeChecker.getTypeAtLocation(...).symbol // yields undefined
ノードには親があります...そして、正しい定義が見つかるまで、親ノードを分析するASTを登ることができました。しかし、これは悪い考えです。もっと簡単な方法があるはずです。
何か案は?