2017-08-14 1 views
0

Es scheint, dass die Klassen im Flow immer auf Instanzen dieser Klasse verweisen und man verwendet typeof, um auf die eigentliche Klasse selbst zu verweisen. Also, wenn ich eine Variable soll eine Unterklasse verweisen (keine Instanz) einer Basisklasse, kann ich:

class MyBaseClass {} 
class MySubClass extends MyBaseClass {} 
let a: $Subtype<MyBaseClass> = MySubClass; // fails 
let b: $Subtype<MyBaseClass> = new MySubClass(); // works, but I don't want this. 
let c: $Subtype<typeof MyBaseClass> = MySubClass; // works! Ok, we're good 

Allerdings kann ich nicht diese scheinen Parameter mit Typ zu tun! Zum Beispiel ist die folgende:

type GenericSubclass<T> = $Subtype<typeof T>; 
// fails with `^ identifier `T`. Could not resolve name` 

Wenn ich die folgende Typoskript Trick versuchen (siehe Generic and typeof T in the parameters), es scheitert auch:

type ValidSubclass<T> = { new(): T }; 
const c: ValidSubclass<BaseClass> = MySubClass; 
// fails with: property `new`. Property not found in statics of MySubClass 

Bitte beachte, dass ich new versucht, __proto__ und constructor.

Was gibt? Gibt es eine Problemumgehung?

Antwort

1
typeof MyBaseClass 

ist

Class<MyBaseClass> 

so können Sie tun

type GenericSubclass<T> = $Subtype<Class<T>>; 
Verwandte Themen