I'm in the process of optimizing some code in my library, however, I have a bit of an issue regarding why bracket notation isn't working when trying to call an imported class.
Parameter type accepts a string that is camelCased, such as: myString.
The parameter data can be anything.
import { foo } from './example';
export const find = (type: string, data: any) => {
// This next line effectively deletes the end of the string starting
// from the first capital letter.
const f = type.replace(/[A-Z][a-z]+/, '');
try {
return [f][type](data);
} catch (e) {
return e;
}
};
this is what I expect it to look like if I was to visualize it using dot notation:
foo.fooBar(someRandomData)
This should call the static method fooBar(data) on the imported class foo,
however, I receive an error message:
TypeError: [f][type] is not a function
If I was to revert it back to my if..else if style, it works:
if (type.startsWith('foo')) return foo[type](data);
How can I do what is desired above without getting the defined error message?
Thank you for your help in advance!
EDIT: This is an example I modified from already existing code, therefore, I fixed a few typos.
EDIT #2: as per requested, the imported class
foolooks like this:
export class foo{
static fooBar(data){
// Do stuff with data...
}
[f][type]syntax? Because what you're doing is creating an array containingf, then trying to access the property namedtypefrom said array, which is probably returningundefined, which is not a function.typestring is, for instance'fooBar', then it should callfoo.bar(data)?[class][method](data)so I can dynamically call the correct class without having to do a bunch ofifstatements. Unless this isn't possible and I'm missing something..?