flowtype:$在泛型类型中使用时的子类型和typeof失败
问题描述:
似乎流中的类类型始终引用该类的实例,并且使用typeof
来引用实际的类本身。所以,如果我想要一个变量来引用基类的子类(不是实例),我可以这样做:
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
不过,我似乎无法与类型参数做到这一点!例如,以下内容:
type GenericSubclass<T> = $Subtype<typeof T>;
// fails with `^ identifier `T`. Could not resolve name`
如果我尝试以下打字稿招(见Generic and typeof T in the parameters),它也将失败:
type ValidSubclass<T> = { new(): T };
const c: ValidSubclass<BaseClass> = MySubClass;
// fails with: property `new`. Property not found in statics of MySubClass
请注意,我试图new
,__proto__
和constructor
。
什么给?有没有解决方法?
答
typeof MyBaseClass
是
Class<MyBaseClass>
所以你可以做
type GenericSubclass<T> = $Subtype<Class<T>>;