【问题标题】:How to get exported members using Typescript Compiler API如何使用 Typescript Compiler API 获取导出的成员
【发布时间】:2019-07-16 10:33:30
【问题描述】:

我正在处理https://github.com/GooGee/Code-Builder

这是 Typescript Compiler API 加载的文件:


import * as fs from 'fs'

这是我的代码:


function getExportList(node: ts.Identifier, checker: ts.TypeChecker) {
    const symbol = checker.getSymbolAtLocation(node)
    return checker.getExportsOfModule(symbol)
}

尝试获取fs 的导出成员。

我知道symbol 不是ts.ModuleSymbol,它不起作用。

那我该怎么办?

【问题讨论】:

  • this 有帮助吗?
  • 建议以后用 typescript-compiler-api 标记这些,因为你会得到更快的响应。

标签: typescript typescript-compiler-api


【解决方案1】:

您需要从那里的本地 fs 符号中获取别名符号。

const localFsSymbol = typeChecker.getSymbolAtLocation(node)!; // todo: handle when undefined
const fsSymbol = typeChecker.getAliasedSymbol(localFsSymbol);
const moduleExports = typeChecker.getExportsOfModule(fsSymbol);

// this prints out ["rename", "renameSync", "truncate", ...etc...]
console.log(moduleExports.map(s => s.name));

如果这不起作用,请确保程序中没有诊断:

const diagnostics = ts.getPreEmitDiagnostics(program);
console.log(diagnostics);

【讨论】:

  • 谢谢一百万。这一直困扰着我好几个星期:)
  • @David 节点的可能值应该是什么(传递给 getSymbol 函数)?
【解决方案2】:

简单地调用它

this.fs.getExportList(urIdentifier,urTypeChecker)

【讨论】:

  • 对不起,我之前没有说清楚。 fsgetExportList 不在同一个文件中。
  • 然后在哪个地方
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多