用例:给定一个变量声明,如let i = 0
或const j = getSomething();
,找出变量是int,float还是其他任何东西(不只是number
vs non - {{ 1}})。要做到这一点,我假设一般的方法是找到值设置的所有位置,找出它们的类型(递归),并查看是否有任何设置为int以外的东西。
如果需要,我可以访问number
和ts.TypeChecker
。一些tweets from Daniel Rosenwasser表示检查器API是可行的方法,但我无法确定要使用哪些API。
Relevant GitHub issue& relevant source file
编辑:这不像ts.Program
那么简单。假设我们有以下块:
typeChecker.getSymbolAtLocation
我正在尝试抓取一个抓住树的程序,以了解function someScope() {
let myInt = 0;
let myFloat = 0;
for (let i = 0; i < 3; i += 1) {
myInt = i;
myFloat = i;
}
if (external) {
myInt = 7;
} else {
myFloat = 7.5;
}
return myInt * myFloat;
}
实际上是myInt
(不只是一般int
),而number
是键入myFloat
和float
会返回someScope
(不是float
)。
“最坏情况”的情况是爬行变量的包含范围,找到对它的所有引用,并递归地获取它们的类型。当然必须有一个标准的方法来做到这一点?