如何使用 Typescript 编译器获取导出的成员 API
How to get exported members using Typescript Compiler API
我正在研究 https://github.com/GooGee/Code-Builder
这是Typescript编译器加载的文件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.fs.getExportList(urIdentifier,urTypeChecker)
您需要从本地 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);
我正在研究 https://github.com/GooGee/Code-Builder
这是Typescript编译器加载的文件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.fs.getExportList(urIdentifier,urTypeChecker)
您需要从本地 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);