I want to implement generic method which will return concrete type based on provided interface. Is this even possible in TypeScript?
Here is my pseudo example:
interface IDog {
canRun: boolean;
}
interface IBird {
canFly: boolean;
}
class Dog implements IDog {
canRun: boolean;
}
class Bird implements IBird {
canFly: boolean;
}
function createInstance<T>(): T {
const key = typeof T;
switch (key) {
case IBird:
return new Bird();
return
case IDog:
return new Dog();
default:
break;
}
}
// concrete is Dog
const concrete = createInstance<IDog>();
createInstance() method is a raw example of what I am trying to achieve, it will not compile!
I would like to provide interface type to createInstance() method and implement some logic which will create concrete type for provided interface.
Is it possible in TypeScript?