如何使用TypeScript API获取对节点的所有引用?

如何使用TypeScript API获取对节点的所有引用?,typescript,typescript-compiler-api,Typescript,Typescript Compiler Api,用例:给定一个变量声明,如let i=0或const j=getSomething(),找出变量是int、float还是其他任何形式(不仅仅是numbervs非number)。要做到这一点,我假设一般的方法是找到设置值的所有位置,找出它们的类型(递归),并查看是否有人将其设置为int以外的其他值 如果需要,我可以使用ts.TypeChecker和ts.Program。有几个例子表明checker API是一种发展方向,但我不知道应该使用哪些API & 编辑:这不像typeChecker.getS

用例:给定一个变量声明,如
let i=0
const j=getSomething()
,找出变量是int、float还是其他任何形式(不仅仅是
number
vs非
number
)。要做到这一点,我假设一般的方法是找到设置值的所有位置,找出它们的类型(递归),并查看是否有人将其设置为int以外的其他值

如果需要,我可以使用
ts.TypeChecker
ts.Program
。有几个例子表明checker API是一种发展方向,但我不知道应该使用哪些API

&

编辑:这不像
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;
}
函数someScope(){
设myInt=0;
设myFloat=0;
对于(设i=0;i<3;i+=1){
myInt=i;
myFloat=i;
}
如果(外部){
myInt=7;
}否则{
myFloat=7.5;
}
返回myInt*myFloat;
}
我试图让一个程序在树上爬行,以理解
myInt
实际上是一个
int
(不仅仅是一个普通的
number
),而
myFloat
float
类型,并且
someScope
返回
float
(不是
int


“最坏的情况”是爬过变量的包含范围,找到对它的所有引用,然后递归地获取它们的类型。肯定有一个标准的方法来做到这一点

你是说
让i:any=remoteServer.getSomethingUnexpected()
?因为否则您应该已经知道类型。@Kokodoko这是用于静态分析的TypeScript API,而不是用于开发时类型检查。现在,我使用的是tsutils'
collectVariableUsage
。不过,它只适用于文件中的使用。