自定义类型与混合不兼容

时间:2018-03-26 23:32:57

标签: flowtype

问题可能是演示here

我想定义一个可以采用混合类型数组的函数:

function foo(x: Array<mixed>): string {
  // ... do something
}

然后我尝试用一​​些自定义对象类型的数组调用它:

type Thing = {
  id: string
}

let array : Array<Thing> = [{id: 'hello'}];

foo(array);

...我收到以下错误

Cannot call `foo` with `array` bound to `x` because `Thing` [1] is incompatible with mixed [2] in array element.`

是否有一些我不了解mixed类型的内容。为什么不能使用对象数组作为参数?

1 个答案:

答案 0 :(得分:3)

它与数组参数的可变性有关。您可以使用var allRows = document.querySelectorAll( "tr[id*='qryMyReservedSlots_Payment']"); Array.from( allRows ).forEach( function(rowElement){ //logic with rowElement }) 来满足要求。

$ReadOnlyArray

数组通过引用传递,而不是通过值传递,因此变量function foo(x: $ReadOnlyArray<mixed>): string { // ... do something return "hello"; } type Thing = { id: string } let array : Array<Thing> = [{id: 'hello'}]; foo(array); 中包含的值可以在array内修改。 e.g。

foo

x.push(1) 将不再是array的数组。所以使用$ ReadOnlyArray意味着Thing是不可变的,因此x是安全的。