#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
});