microsoft / microsoft/TypeScript
ConstructorOf<T> wrapper to declare type of constructor of type parameter
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
so if I have
class MyClass {
}
Then the type of MyClass.prototype is MyClass
And the type of MyClass is typeof MyClass
If I want these two functions
function takesPrototype(p: MyClass) { /* ... */ }
function takesClass(p: typeof MyClass) { /* ... */ }
I can call them as
takesPrototype(MyClass.prototype)
takesClass(MyClass)
But what if MyClass was defined as a type parameter.
For example if I want to have a function that of this type -
const mod = getModule(ModuleClass)
// mod should be of type ModuleClass
I would like to define this as such
function getModule<M extends Module>(moduleClass: typeof M): M {
// something like a getInstance() pattern
}
The problem with this is typeof M will complain that I am trying to use M as a value while it is a type.
So I suggest a type wrapper of this type
type ConstructorOf<C> = { new( ...args: any[] ): C }
Now I can define my function as such
function getModule<M extends Module>(moduleClass: ConstructorOf<M>): M {
// something like a getInstance() pattern
}
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia esaminando il wrapper ConstructorOf proposto nell’issue e la distinzione esistente tra parametri di tipo e valori di costruttore in TypeScript. Determina i punti di ingresso coinvolti del sistema dei tipi e del compilatore, quindi definisci il comportamento supportato per i costruttori generici e convalidalo con test mirati di type-checking che coprano getModule e gli argomenti del costruttore.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100