JSFiddle - React, Tailwind, and code Playground
by David Kyle
TypeScript
class Mapper<TItem> {
private ctor: {new(): TItem};
private instance: TItem;
constructor(arg: { new(): TItem }) {
this.ctor = arg;
this.instance = new this.ctor();
}
public getTypeInfo(): void {
console.log('--constructor--', this.ctor);
console.log('--instance--', this.instance);
}
public getInstance(): TItem {
return this.instance;
}
}
class SomeClass {
public id: number;
public name: string;
constructor() {
this.id = 1;
this.name = 'Dave';
}
}
var instance = new Mapper<SomeClass>(SomeClass);
var instanceTwo = new Mapper(SomeClass); // Same thing
instance.getTypeInfo();
instanceTwo.getTypeInfo();
// Doesn't work
public class OtherClass<TWrapped> {
public wrapped: TWrapped;
constructor(type: { new(): TWrapped }) {
this.wrapped = new Mapper(type).getInstance();
}
}
public class WrappedOtherClass extends OtherClass<SomeClass> {
constructor() {
super(SomeClass);
}
}
var wrappedInstance = new Mapper(WrappedOtherClass);
wrappedInstance.getTypeInfo();
var nextInstance = new Mapper(OtherClass<SomeClass>);
nextInstance.getTypeInfo();