【问题标题】:typescript, ts-morph module, is there access to underlying `ts.SourceFile` instance from a `ts-morph.SourceFile` instance?typescript,ts-morph 模块,是否可以从 ts-morph.SourceFile 实例访问底层的 ts.SourceFile 实例?
【发布时间】:2021-01-16 07:11:46
【问题描述】:

我正在尝试使用ts-morph npm 模块来替换一些我已经编写但与ts-morph 重叠并且质量较差的代码。不过,我有一些现有的函数采用 ts.Node 类型参数,主要用于探索和发现,我需要在尝试 ts-morph 时将其用作参考。

但是,我看不到从 ts-morph.SourceFile 实例访问底层 ts.Node 实例的方法 - 没有返回类型为 ts.Nodets.TypeCheckerts-morph 函数。

这行不通

      (sourceFile as unknown) as ts.SourceFile,
      (checker as unknown) as ts.TypeChecker,

因为对于初学者来说,(sourceFile as unknown) as ts.SourceFile 没有kind 成员。

有没有办法从例如ts-morph.SourceFile 访问底层的ts.Node 实例?

【问题讨论】:

    标签: typescript-compiler-api ts-morph


    【解决方案1】:

    ts-morph 提供对其封装的所有底层编译器 API 对象的访问。

    对于任何节点,您都可以使用compilerNode 属性访问底层编译器节点:

    sourceFile.compilerNode // ts.SourceFile
    

    请注意,只要通过 ts-morph 操作源文件(例如,您将类添加到源文件、删除函数或其他类似的东西),底层编译器节点就会变得过时。

    https://github.com/dsherret/ts-morph/blob/af35677f3b498ed0f8e87e4b6c92a7246cfab210/packages/ts-morph/lib/ts-morph.d.ts#L3189

    要获取 TypeScript TypeChecker,请使用TypeChecker 上的compilerObject 属性:

    project.getTypeChecker().compilerObject // ts.TypeChecker
    

    【讨论】:

    • 太棒了!我一直在考虑unwrap(),但各种障碍正在减缓这方面的进展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多