Мне нужно получить весь экспорт из заданного SourceFile
. Для файлов TypeScript это довольно просто сделать:
const moduleSymbol = checker.getSymbolAtLocation(sourceFile)
const exportedSymbols = checker.getExportsOfModule(moduleSymbol)
Однако, даже если установлено allowJS
, при загрузке файла, который использует module.exports=
или exports.foo=
, getSymbolAtLocation
возвращает undefined
. console.log
Если sourceFile
показывает, что у него есть свойство symbol
, но оно помечено @internal
, что означает, что я не должен его использовать.
Я мог бы создать поддельный исходный файл который импортирует каждый файл с этой проблемой и посмотрите на символ импорта, но это кажется неправильным ответом на проблему.
// test.js
exports.foo = 1
const ts = require('typescript')
const program = ts.createProgram(['test.js'], { allowJs: true })
const checker = program.getTypeChecker()
const sourceFile = program.getSourceFile('test.js')
const exportSymbol = checker.getSymbolAtLocation(sourceFile)
console.log(exportSymbol) // undefined
console.log(sourceFile.symbol) // what I want