API компилятора TypeScript: найти, из какого файла пришел тип - PullRequest
1 голос
/ 01 ноября 2019

Учитывая ts.Program и имя типа, можно ли найти, из какого файла пришел тип? Запрашиваемый тип всегда будет существовать в программе и будет экспортирован из главной точки входа.

Мне не обязательно нужен здесь конкретный код, только с каких API-интерфейсов нужно начинать или с примером чего-то подобного. Использование program.getTypeChecker() для получения ts.TypeChecker может быть уместным, но ни один из его методов, по-видимому, не обеспечивает очевидного пути перехода от просто имени типа к чему-то, что скажет, где был определен тип.

(VS код «перейти к определению» концептуально похож, но код проходит через несколько уровней абстракции и не является полезным примером.)

1 Ответ

0 голосов
/ 01 ноября 2019

Из данного типа вы можете получить символ, а из символа вы можете получить объявления. Из объявлений символа вы можете получить все исходные файлы, из которых получен тип (например, объединение объявлений может привести к тому, что тип будет иметь несколько объявлений, и эти объявления могут находиться в другом файле).

Вот пример кода (непроверенный,но я думаю, что это будет работать):

const symbol = type.getSymbol()!; // todo: you should handle for when undefined
const declarations = type.declarations;
const sourceFiles = Array.from(new HashSet(declarations.map(d => d.getSourceFile()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...