我真的很想知道如何在自定义打字机转换器中跟踪模块导入。事实上,我希望实现以下目标:
我想找到一个函数调用,例如transform(PlaygroundComponent)
然后我想找到作为函数调用的参数检索的相应类(PlaygroundComponent)并进行调整/转换。此类可以从另一个文件导入。
我真的很想知道如何实现这一目标。目前,我不知道如何跟随模块导入并获得有关类定义的帮助。
我将不胜感激。谢谢。 :)
这是我的问题的更详细说明:
===设置===
文件:source.ts
import { ttransformer } from "../ttransformer";
import { TestComponent } from "./test.component";
ttransformer(TestComponent);
此文件是自定义打字机转换器的主要目标。
文件:ttransformer.ts
export function ttransformer(type: any): void {}
目前,这只是打字稿转换器的“标记”。
文件:test.component.ts
export class TestComponent {}
只是一个基本类,它将作为变换器函数的参数而基于。
===运行===
在文件 source.ts 上使用ts-patch运行自定义打字稿转换器将执行以下操作:
===问题===
因此,我遇到以下问题: 在我知道要调整它之前,遍历了我要调整的实际类。我只知道应该由于 ttransformer(PlaygroundComponent)来修改该类。这行代码是最后处理的内容。
所以我不知道应该在正确的时间转换哪个班级的信息。
===我的想法===
因此,我有两个解决方案:
按照模块导入步骤查找特定的类,然后进行调整。因此,转换器会看到 ttransformer(PlaygroundComponent)行,然后必须遵循PlaygroundComponent的导入。因为它必须找到定义。
或者使用两个变压器穿越AST两次。第一个转换器找到所有必须转换的类,第二个转换器进行实际的转换。那么您的建议就可以了,因为我确实知道必须调整哪些班级。
所以这个问题也与我的问题有关: Shared data with typescript transfromers
答案 0 :(得分:1)
您可以使用TypeChecker#getAliasedSymbol
。
鉴于您共享的example code,您将使用typeChecker.getAliasedSymbol(argumentSymbol)
来获取导入的基本符号。