TypeScript-kompilator-API: hitta från vilken fil en typ kommer
Givet ett ts.Program och namnet på en typ, är det möjligt att ta reda på från vilken fil typen kommer? Typen som frågas kommer alltid att finnas i programmet och kommer att exporteras från huvudingångspunkten.
Jag behöver inte nödvändigtvis specifik kod här, bara vilka API:er man kan börja med eller ett exempel på något liknande. Att använda program.getTypeChecker() för att få en ts.TypeChecker kan vara relevant, men ingen av dess metoder verkade ge ett uppenbart sätt att gå från bara ett typenamn till något som skulle visa var typen definierades.
(VS Code "gå till definition" är konceptuellt liknande, men koden går igenom flera lager av abstraktion och var inte ett användbart exempel.)
Svar #1
Från en given typ kan du få symbolen och från symbolen kan du få deklarationerna. Från symbolens deklarationer kan du få alla källfiler som typen kommer ifrån (ex. deklarationssammanfogning kan orsaka att en typ har flera deklarationer och dessa deklarationer kan finnas i en annan fil).
Här är något exempel på kod (otestad, men jag tror att det kommer att fungera):
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()));
