我要迁移到Flow,这个内部JavaScript框架高度依赖ES6 mix-in,并且类工厂的结构类似于:
function Mixin(Base) {
return class extend Base {
constructor() { super() }
mixin() { … }
}
}
但是我无法为此类方法编写正确的泛型注释。
到目前为止,我最好的猜测是:
interface IMixin {
mixin():void;
}
function Mixin<T>(Base: Class<T>): Class<T & IMixin> {
return class extend Base implements IMixin {
constructor() { super() }
mixin() { … }
}
}
与https://stackoverflow.com/a/33030114/739773松散相关,但是无论我测试的微小变化如何,均会导致Flow抱怨Flow: Cannot return 'class { ... }' because class '<<anonymous class>>' [1] is incompatible with 'T' [2].
。
我想念什么?缺少禁用此类功能的类型检查的任何提示吗?