Fabrica în TypeScript cu un argument generic


Încerc să implementez o fabrică în TypeScript care să returneze un tip generic.
Am descoperit deja că trebuie să trec tipul ca prim argument și să-i setez tipul la o semnătură CTOR (new() => T în acest exemplu).
Problema începe atunci când vreau să trec un tip generic fabricii - primesc o eroare care spune: Value of type 'typeof G' is not callable. Did you mean to include 'new'?(2348).
Există vreo modalitate de a realiza asta?

Iată o versiune simplificată a problemei:

// Generic class
class G<T>{}
// Standard non generic
class B{}

function make<T>(t: new () => T){
    return new t()
}
// Works
make(B)
// Value of type 'typeof G' is not callable. Did you mean to include 'new'?(2348)
make(G<number>)

Linkul către playground-ul Typescript pentru codul de mai sus.

Răspuns #1

Problema ta este că ai setat genericul în locul greșit. În make(value), value ar trebui să fie cod executabil fără nicio definiție TypeScript. Deci apelul make(G<number>) este fals pentru că nu poți apela un generic TypeScript ca parametru.

Pentru a defini genericul, trebuie să îl scrii înainte de paranteză:

make<G<number>>(G)

Așadar, aici, G<number> este tipul pe care îl dai și G este codul executabil „valid”.

Aruncă o privire la locul de joacă.