如何确定 TypeScript.Expression 对象的结果类型?
How do I determine the result type of a TypeScript.Expression object?
使用 TypeScript 抽象语法树时,如何确定 TypeScript.Expression 对象的结果类型?
我正在使用 TSLint 并尝试查找未将函数类型的对象作为第一个参数传递的 setTimeout 调用。例如,在下面的代码中,我想知道调用了 setTimeout 并且第一个参数是一个函数。
// function that produces a function
var createFunction : () => (() => void) = () => {};
// result of createFunction() should be of type function
setTimeout(createFunction());
AST 排列如下:
- 设置超时 -> TypeScript.CallExpression
- createFunction() -> TypeScript.Expression
我曾尝试使用 LanguageService 来确定表达式的类型,但是 none 以下 API 提供了我所需要的:
- languageServices.getQuickInfoAtPosition
- languageServices.getDefinitionAtPosition
- languageServices.getTypeDefinitionAtPosition
有什么想法吗?
语言服务本身不会公开该信息。
您可以使用类型检查器来执行此操作。从 createProgram
中获得 program
对象后,写:
let typeChecker = program.getTypeChecker();
let type = typeChecker.getTypeAtLocation(node);
使用 TypeScript 抽象语法树时,如何确定 TypeScript.Expression 对象的结果类型?
我正在使用 TSLint 并尝试查找未将函数类型的对象作为第一个参数传递的 setTimeout 调用。例如,在下面的代码中,我想知道调用了 setTimeout 并且第一个参数是一个函数。
// function that produces a function
var createFunction : () => (() => void) = () => {};
// result of createFunction() should be of type function
setTimeout(createFunction());
AST 排列如下:
- 设置超时 -> TypeScript.CallExpression
- createFunction() -> TypeScript.Expression
我曾尝试使用 LanguageService 来确定表达式的类型,但是 none 以下 API 提供了我所需要的:
- languageServices.getQuickInfoAtPosition
- languageServices.getDefinitionAtPosition
- languageServices.getTypeDefinitionAtPosition
有什么想法吗?
语言服务本身不会公开该信息。
您可以使用类型检查器来执行此操作。从 createProgram
中获得 program
对象后,写:
let typeChecker = program.getTypeChecker();
let type = typeChecker.getTypeAtLocation(node);