Hent alle mulige eksporteringer fra modul ved hjelp av TypeScript API eller ts-morph


// sourceFileContent
import path from 'path';
// Short version of node_modules/@types/node/path.d.ts
declare module 'path' {
    namespace path {
        interface ParsedPath {}
        interface FormatInputPathObject {}
        interface PlatformPath {
            normalize(p: string): string;
            join(...paths: string[]): string;
            // other...
        }
    }
    const path: path.PlatformPath;
    export = path;
}

Koden nedenfor er skrevet ved hjelp av ts-morph som er en wrapper rundt TypeScript

const sourceFile = project.createSourceFile('source.ts', sourceFileContent);
const importDeclarations = sourceFile.getImportDeclarations();

// loop for importDeclarations
let symbol = importDeclaration.getImportClause().getSymbol();
symbol = typeChecker.getAliasedSymbol(symbol);
const exportSymbols = typeChecker.getExportsOfModule(symbol);
// {"ParsedPath" => SymbolObject, "FormatInputPathObject" => SymbolObject, "PlatformPath" => SymbolObject}

Her har jeg fått tre eksport-symboler, men vi kjenner til normalize, join og andre funksjoner som burde eksistere i path-modulen.

import { normalize, join } from 'path'; // no errors

Så jeg sitter fast med å få disse funksjonene (normalize, join, osv.), kan du hjelpe med å få alle mulige eksportene fra en modul ved å bruke ts-morph eller ren typescript API?

Svar #1

Jeg er ikke sikker på hvordan jeg skal gjøre dette ved å bruke symboler, men det er mulig å få egenskapene til path-objektet ved å sjekke typen:

const defaultImport = importDeclaration.getDefaultImportOrThrow();
const defaultImportType = defaultImport.getType();

for (const property of defaultImportType.getProperties()) {
  console.log(property.getName());
}

Utdata :

normalize
join
resolve
isAbsolute
relative
dirname
basename
extname
sep
delimiter
parse
format
toNamespacedPath
posix
win32

Svar #2

Med en interaktiv TypeScript-økt via ts-node:

npx ts-node
> import path from 'path'
{}
> Object.keys(path)
[
  'resolve',    'normalize',
  'isAbsolute', 'join',
  'relative',   'toNamespacedPath',
  'dirname',    'basename',
  'extname',    'format',
  'parse',      'sep',
  'delimiter',  'win32',
  'posix',      '_makeLong'
]
> 

Relaterte artikler