我真的很想知道如何在自定义打字稿转换器中跟踪模块导入。事实上,我想实现以下目标:
我想找到一个函数调用,例如 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
您可以使用TypeChecker#getAliasedSymbol
.
鉴于您共享的示例代码,您将用于typeChecker.getAliasedSymbol(argumentSymbol)
获取导入的基本符号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句