I am migrating some node ES5 node code to Typescript. I need to port these two pieces of code where I iterate through all the files in a directory and call the default function these files are exporting. How would I do that in Typescript or ES6?
models/index.js
const fs = require("fs");
module.exports = () =>
fs.readdirSync(__dirname).map((model) => {
if (model === "index.js") return;
return require("./" + model);
});
index.js
const modelDefiners = require("./models")();
for (const modelDefiner of modelDefiners) {
if (typeof modelDefiner === "function") {
modelDefiner();
}
}
Advertisement
Answer
You can do this with dynamic imports:
import { promises as fs } from 'fs';
import { join } from 'path';
export default async function*() {
for (const model of await fs.readdir(__dirname)) {
if (model === "index.js") continue;
yield await import(join(__dirname, model));
}
}
import modelDefiners from "./models";
(async () => {
for await (const {default: modelDefiner} of modelDefiners()) {
if (typeof modelDefiner === "function") {
modelDefiner();
}
}
})();