1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| function create<T>(c: { new (): T }): T { return new c() }
class BeeKeeper { constructor(private hasMask: boolean = false) {} }
class ZooKeeper { constructor(private nameTag: string = "undefined") {} }
class Animal { constructor(private numLegs: number = 0) {} }
class Bee extends Animal { constructor(num: number, public keeper: BeeKeeper) { super(num) } }
class Lion extends Animal { constructor(num: number, public keeper: ZooKeeper) { super(num) } }
function createInstance<A extends Animal>( c: new (x, y) => A, numLegs: number, keeper: any ): A { return new c(numLegs, keeper) }
console.log(createInstance(Bee, 2, new BeeKeeper(true))) console.log(createInstance(Lion, 4, new ZooKeeper("lion")))
|