Javascript 流类型,强制转换为阵列类型';不能从显式类型工作,但不能从隐式类型工作

Javascript 流类型,强制转换为阵列类型';不能从显式类型工作,但不能从隐式类型工作,javascript,flowtype,subtyping,Javascript,Flowtype,Subtyping,考虑到以下几点: const a: Array<number> = [1,2,3]; const b = [1,2,3]; const q: Array<boolean | number> = a; const r: Array<boolean | number> = b; 然后我还有一个函数,它返回一个整数数组,这个函数的调用如下: const fib = [1, 1, 2, 3, 5]; theFunction({sequence: fib}); 显然

考虑到以下几点:

const a: Array<number> = [1,2,3];
const b = [1,2,3];
const q: Array<boolean | number> = a;
const r: Array<boolean | number> = b;
然后我还有一个函数,它返回一个整数数组,这个函数的调用如下:

const fib = [1, 1, 2, 3, 5];
theFunction({sequence: fib});

显然,
{sequence:fib}
是一种类型
{sequence:Array}
,它显然是普通javascript对象的一个子类型。

我认为可以找到一些有用的信息。问题(我认为)在于
Array
是不变的,这意味着
Array
不是
Array
的子类型。这很好:

const a: Array<number> = [1,2,3];
const b = [1,2,3];
const q: $ReadOnlyArray<boolean | number> = a;
const r: Array<boolean | number> = b;
const a:Array=[1,2,3];
常数b=[1,2,3];
常数q:$ReadOnlyArray=a;
常数r:Array=b;
我的最佳猜测是,当类型是从数组文本推断出来的而不是显式类型时,Flow会做一些聪明的事情


至于你的例子,我没有得到任何运行0.93的流错误,你能在流尝试链接中显示一个repo吗?

不知道实际答案,但如果允许你执行
const q:Array=a
,则可以执行
q.push(true)
,但这违反了
a
的类型。我的应用程序中的“bug”是由于更复杂一点,我也通过用
$ReadOnly
封装它来修复它(因此不仅内部数组是只读的,整个对象是/需要是)。很好,很高兴听到这个消息。如果你觉得我的答案很有帮助,也请投赞成票。:-)
const a: Array<number> = [1,2,3];
const b = [1,2,3];
const q: $ReadOnlyArray<boolean | number> = a;
const r: Array<boolean | number> = b;