问题可能是演示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
类型的内容。为什么不能使用对象数组作为参数?
答案 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
是安全的。