Flowtype:Extend Array类型参数

时间:2017-08-03 11:36:08

标签: javascript flowtype

首先,请原谅我,如果我的措辞不正确,我对所有的打字行话都不太熟悉。

我有两种类型:AB,其中BA的扩展名,如下所示:

type A = { a: string };
type B = { a: string, b: string };

断言B类型的值符合类型A的效果正常:

const bar: B = { a: 'hello', b: 'world' };
(bar: A); // No problemo

但是当将值包装到数组中时,断言就变坏了:

const bars: Array<B> = [bar]; // This is fine
(bars: Array<B>); // Also fine
(bars: Array<A>); // Breaks!!

我完全误解了什么吗?这是泛型问题,数组问题,还是Flow中的错误?

Flow版本:v0.52.0

自己在Flow

上查看

1 个答案:

答案 0 :(得分:3)

那是因为T中的类型参数Array<T>是不变的 - 这意味着在考虑子类型关系时它不接受超类型或子类型。有关更多信息,请查看有关差异的文档:https://flow.org/en/docs/lang/variance/#toc-invariance

您正在寻找的是具有协变类型参数的数据结构。具体而言,您可能希望使用$ReadOnlyArray<T>

Try it