typescript-compiler-api - TypeScript 编译器:TypeChecker#getTypeAtLocation() 为非本地类型返回错误
问题描述
我正在开发一些 TypeScript 工具。为此,我TypeChecker#getTypeAtLocation()
用来确定PropertyDeclaration
只有 ainitializer
但没有声明的 a 的类型type
。这适用于原语(数字、字符串等)和本地声明的类型。但是,对于导入的类型,我总是会得到一个错误类型。这在一定程度上是有道理的,因为导入的类型不是当前语法树的一部分,但在许多情况下它也没有帮助。可能是什么问题,请记住我tsc.js
使用 Nashorn 在 JVM 中运行?
解决方案
TypeChecker
实例只能与在创建类型检查器的相应实例中找到的源文件和后代节点一起使用Program
。
您看到的错误类型是因为源文件尚未经历为其创建符号的绑定阶段。只有ts.SourceFile
当类型检查器通过程序的CompilerHost
.
调用 时TypeChecker#getTypeAtLocation
,它可能会在内部尝试获取该节点的符号。当它这样做时,它不会找到符号然后返回错误类型。在提供字符串和数字文字时调用此方法有效,因为在这种情况下编译器不需要查看符号来确定类型。
要解决此问题,请从Program
实例获取源文件(例如,通过使用program.getSourceFiles()
or program.getSourceFile(fileName)
)而不是直接结果ts.createSourceFile
(仅将其提供给编译器主机)。
推荐阅读
- python - python将负整数转换为字节(singed = True),但转换回来,它变成了正数
- android - Android Studio 构建即时应用发布变体
- ios - 发现多个名为“frame”的方法,结果、参数类型或属性不匹配
- python - Firebase Python firestore.DELETE_FIELD 在 VS Code 中显示为错误
- vim - MacVim 与 .swp 文件相关的设置与其他版本的 Vim 相比有何独特之处?如何覆盖它们?
- javascript - HTML 编号在使用 PHP 的 javascript 中不起作用
- windbg - 如何在调用堆栈帧中查找对象/句柄正在等待“WaitForMultipleObjects”?
- r - 提高R(Rcpp)中4个嵌套for循环的速度?
- c# - 这会被认为是对状态机模式的滥用吗?
- sql - Oracle:如果 TABLE_A 存在,则返回 count(*),否则返回 0;