Как мне получить общий JS экспорт с помощью API компилятора TypeScript? - PullRequest
1 голос
/ 12 июля 2020

Мне нужно получить весь экспорт из заданного 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
...