TypeScript compiler API: find ud af, hvilken fil en type kommer fra


Givet et ts.Program og navnet på en type, er det muligt at finde ud af, hvilken fil typen kom fra? Den type, der forespørges, vil altid eksistere i programmet og vil blive eksporteret fra hovedindgangspunktet.

Jeg har ikke nødvendigvis brug for specifik kode her, bare hvilke API'er man skal starte med, eller et eksempel på noget lignende. Brug af program.getTypeChecker() for at få en ts.TypeChecker kan være relevant, men ingen af dens metoder syntes at give en oplagt måde at gå fra kun et typenavn til noget, der kunne fortælle, hvor typen blev defineret.

(VS Code "gå til definition" er konceptuelt lignende, men koden kører gennem flere lag af abstraktion og var ikke et nyttigt eksempel.)

Svar #1

Fra en given type kan du få symbolet, og fra symbolet kan du få deklarationerne. Fra symbolets deklarationer kan du få alle kildefiler, typen kommer fra (f.eks. kan deklarationssammenfletning få en type til at have flere deklarationer, og disse deklarationer kan befinde sig i en anden fil).

Her er noget eksempel kode (utestet, men jeg tror, det vil fungere):

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()));

Relaterede artikler