Получить весь экспорт модуля в один файл программно в Typescript / Javascript ES6

#javascript #typescript #ecmascript-6 #module

#javascript #машинописный текст #ecmascript-6 #модуль #typescript

Вопрос:

Я хочу перебрать все экспортируемые модули, чтобы извлечь их типы.

Я предполагаю, что во время компиляции эта информация будет доступна

 export const a = 123;
export const b = 321;

// Is there any way to do something like this in typescript/javascript es6?
console.log(module.exports)
// { a: 123, b: 321 }
  

Редактировать:
Я хотел бы поделиться решением проблемы, о которой я упомянул в первой строке.

Спасибо за ответ, но, похоже, я был неправ, ограничивая его одним файлом в целом. Я создал отдельную types.ts и использовал библиотеку ‘utility-types’ для соответствующих манипуляций с типами

 import { ValuesType } from 'utility-types';
import * as myModue from './myModule';

export IMyModuleType = ValuesType<typeof myModue>;
  

А затем просто импортировал тип с новым синтаксисом 3.8

 import type { IMyModuleType } from './types';
//...
  

Ответ №1:

Вы можете поиграть с API компилятора typescript. Это дает вам всю необходимую информацию

 import * as ts from "typescript";

function compile(fileNames: string[], options: ts.CompilerOptions): void {
  let program = ts.createProgram(fileNames, options);
  let emitResult = program.emit();

  console.log(program)
}

compile(['your-filename.ts'], {
  noEmitOnError: true,
  noImplicitAny: true,
  target: ts.ScriptTarget.ES5,
  module: ts.ModuleKind.CommonJS
});