首先,请原谅我,如果我的措辞不正确,我对所有的打字行话都不太熟悉。
我有两种类型:A
和B
,其中B
是A
的扩展名,如下所示:
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
上查看答案 0 :(得分:3)
那是因为T
中的类型参数Array<T>
是不变的 - 这意味着在考虑子类型关系时它不接受超类型或子类型。有关更多信息,请查看有关差异的文档:https://flow.org/en/docs/lang/variance/#toc-invariance
您正在寻找的是具有协变类型参数的数据结构。具体而言,您可能希望使用$ReadOnlyArray<T>
。