TypeScript Transformer - 遵循模块导入

卢克马克

我真的很想知道如何在自定义打字稿转换器中跟踪模块导入。事实上,我想实现以下目标:

  • 我想找到一个函数调用,例如 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 运行自定义打字稿转换将执行以下操作:

  • 文件source.ts是主要入口点。因此它会解析这个文件。但是它将开始解析此文件的导入。
  • 首先它会解析文件ttransformer.ts(第一个导入语句)。
  • 其次,它将解析文件test.component.ts(第二个导入语句)。
  • 然后它将继续处理文件source.ts的其余部分

=== 问题 ===

因此,我有以下问题:在我知道要调整它之前,我要调整的实际类已被遍历。我只知道由于ttransformer(PlaygroundComponent)应该修改该类这行代码是最后处理的东西。

所以我不知道我应该在正确的时间点转换哪个类。

===我想到的===

因此,我有两个选择来解决这个问题:

  • 按照模块导入找到特定的类,然后进行调整。所以转换器看到ttransformer(PlaygroundComponent) 行,然后必须遵循 PlaygroundComponent 的导入。因为它必须找到定义。

  • 或者用两个转换器遍历 AST 两次。第一个转换器找到所有必须转换的类,第二个进行实际转换。那么您的建议是可能的,因为我知道必须调整哪些课程。


所以这个问题也与我的问题有某种联系:Shared data with typescript transfromers

罗恩S。

您可以使用TypeChecker#getAliasedSymbol.

鉴于您共享示例代码,您将用于typeChecker.getAliasedSymbol(argumentSymbol)获取导入的基本符号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章