0

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を登ることができました。しかし、これは悪い考えです。もっと簡単な方法があるはずです。

何か案は?

4

0 に答える 0