I have a function. It should accept class definitions and produce object with their names (first letter - lowercase) mapped to their instances. I want it to be strongly typed.
function createObject (...classes: any[]) {
// something like
return classes.reduce((acc, class) => {
const name = class.name.charAt(0).toLowerCase() + class.name.slice(1);
acc[name] = new class();
return acc;
});
}
So I want to use it like:
const { aClass, bClass, cClass } = createObject(AClass, BClass, CClass);
UPDATE
I'm trying to extract class name like this:
type GetName<T> = 'name' extends keyof T ? T['name'] : never;
type ClassName = GetName<AClass>;
But ClassName is never. Guess I'm missing something crucial.