首先,如果我的措辞有误,请原谅,我对所有的打字术语都不是很熟悉。
我有两种类型: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!!
我是不是完全误解了什么?这是泛型问题,数组问题,还是仅仅是流中的bug?
流程版本: v0.52.0
你自己在Flow上看看吧
发布于 2017-08-03 14:31:05
这是因为Array<T>
中的类型参数T
是不变的--这意味着在考虑子类型关系时,它不接受超类型或子类型。有关方差的更多信息,请查看此处的文档:https://flow.org/en/docs/lang/variance/#toc-invariance
您正在寻找的是一个带有协变类型参数的数据结构。具体地说,您可能希望改用$ReadOnlyArray<T>
。
https://stackoverflow.com/questions/45483050
复制相似问题