如何从流程中的 "object type" 中获取更具体的类型?

How to get a more specific type from "object type" in flow?

考虑下面的代码:

class base<T: {[string]: any}> {
    field: T;
}

type SpecificTy = {|
    val: number,
    field: string,
|}

class subclass<T = SpecificTy> extends base<T> {}

这会产生以下错误:

`T` [1] is incompatible with object type [2] in type argument `T`. [incompatible-type-arg]

我如何创建一个类型“仅具有属性 x、y 和 z 的对象”以提供给接受“任何对象”的基 class?

如果您将对象类型设置为只读,这将起作用:

class base<T: { +[string]: any }> {
    field: T;
}

type SpecificTy = $ReadOnly<{|
    val: number,
    field: string,
|}>;

class subclass<T: SpecificTy> extends base<T> {}

Try Flow

或者如果您不包括索引类型:

class base<T: {}> {
    field: T;
}

type SpecificTy = {|
    val: number,
    field: string,
|};

class subclass<T: SpecificTy> extends base<T> {}

Try Flow