如何使用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
。不过,它只适用于文件中的使用。