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'
]
>
