typescript - TypeScript API:如何检查调用表达式是否使用来自特定接口的签名?
问题描述
我使用 TypeScript 编译器 API 来应用一些转换。
假设我有一些my-pkg
导出一些接口的包IExample
:
interface IExample {
method1(): void;
}
现在假设我有一个实现IExample
:
import {IExample} from "my-pkg";
declare const foo: IExample;
foo.method1();
如何检查foo.method1()
表达式是否相关IExample.method1
?
显然我可以使用signature = TypeChecker.getResolvedSignature(node);
但是我怎样才能去'base'签名并检查它来自IExample
哪里my-pkg
?
我尝试使用signature.declaration
并获取它的父级(类声明或接口声明),但感觉是一种错误的方法,因为在这种情况下,我需要遍历所有父级扩展/实现子句来验证父级在IExample
某处继承。
解决方案
如果你得到调用表达式的表达式 ( foo.method1
) 的符号,它应该是method1(): void
in的符号IExample
:
const symbol = typeChecker.getSymbolAtLocation(callExpr.expression);
// should output `method1`
console.log(symbol!.escapedName);
// should output `method1(): void`
console.log(symbol!.declarations[0].getText());
您将需要处理符号上可能symbol
存在undefined
并且可能存在多个声明(例如,通过声明合并合并的多个同名接口)。
推荐阅读
- laravel-5 - Laravel excel 库(Maatwebsite):如何为导出创建具有多项选择的下拉列表
- android - 无法通过 Android Studio 安装 Intel HAXM
- azure - 禁用“托管虚拟网络”的 Azure Synapse VNet 集成
- html - 如何使用音频网络播放器嵌入 VAST?
- python - 使阵列均匀?
- python - 如何使用掩码或其他方法从特征图中选择一些补丁?
- api - OneLogin:获取特定时间暂停的用户
- javascript - promis - async - await 以加载 Javascript 文件有问题
- mongoose - 如何使用导出模块中的模型?
- c++ - 在 main() 之外解析命令行参数