Search code examples
typescripttypescript-compiler-api

Typescript compile api - detect builtin's like Math


How do you detect a builtin (like Math, console, etc.) with compile API?


Solution

  • If you have the identifier (ex. the identifier with the text Math), you can get its symbol via TypeChecker#getSymbolAtLocation(node). Once you have the symbol, you can follow it back to its declaration(s), which will allow you to get the source file the declaration exists in. Once you have the source file, you can check if it's from the TypeScript package's lib folder. The lib folder contains all the declarations for all the "built in" types.

    For example:

    const symbol = checker.getSymbolAtLocation(ident);
    const isInLibFiles = symbol?.getDeclarations()
        ?.some(s => s.getSourceFile().fileName.includes("/node_modules/typescript/lib/"))
        ?? false;
    

    That said, there may be a better way I'm just not familiar with.